吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4076|回复: 4
收起左侧

[会员申请] 申请会员ID:casual233【未报到,已注销】

[复制链接]
吾爱游客  发表于 2020-2-25 22:29
1. 申请会员ID:casual233
2. 个人邮箱:314957231@qq.com
3. 原创技术文章: 免费实现蓝桥杯vip题目评测系统
本人热爱java,曾参加蓝桥杯比赛。这参赛费本身就不便宜,部分题库还是vip专享。所以我利用java的io读取网上下载的正确答案txt来和我编写的算法的输出进行逐字比较,输出多个答案的正确与否。以此替代官方vip服务。
原文地址:https://blog.csdn.net/qq_31283465/article/details/54864141
我的博客里还纂写了一些蓝桥杯试题的java版本。因为网上能找到的都是c语言的,而一些找得到的java代码也没有充分发挥java的优势。
下图证明文章是属于我个人账户的。
Y9UBK5A{YH225]JBX1{F531.png



程序跑起来如图,1,2,3,4是对应的vip输出文档有4个,我写的算法输出与4个文档对比结果均为true。
image.png
首先,下载所有蓝桥评测系统的源码。
链接: https://pan.baidu.com/s/1bpnCQoZ 密码: xext

关于vip题目,相信你们都可以找到的。
http://blog.csdn.net/rodestillfaraway/article/details/50529597 可以去这里,我会在自己博客写下java实现方法。我的速度比较慢,边摸索边写。

说一下原理:
1.官方原码命名都是有规律的xx-input-01.txt这样的。对应路径自己改下。
2.我首先为了编程思路方便,替换了System的out流,使用的是套在PrintStream里的ByteArrayOutputStream。会将你程序运行的输出存在一个字节数组里面。然后从官方原码的output文件里读取并存入一个字符数组里,两者进行比较。
说一下功能:
1.可以比较输出与原码是否一致
2.会把错误的题目的正确输出和你的输出同时显示在控制台
3.可以使用printInput(int n)在控制台显示原码的input文件
4.可以给run传参来只检测对应的原码
说一下怎么使用:
1.我写的是抽象类,使用时直接创建LT类的对象,构造时传入你当前要检测的题目名字
2.使用内部类补足fun方法,fun里面写入自己的代码。还有一个很重要的一点,我的LT类有一个成员的Scanner对象sc,用来从源码的input文件读取内容。所以你的方法里不需要再新建Scanner对象了。直接使用sc调用read方法就好。3.最后要运行LT的run方法。

接下来,放代码:
[Java] 纯文本查看 复制代码
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;

public abstract class LT {
    Scanner sc;
    String ti;

    public LT(String st) {
        ti = st;
    }

    public void run() {
        for (int i = 1; i <= 30; i++) {
            test(i);
        }
    }

    public void run(int n) {
        test(n);
    }

    public void printIn(int i) {
        try {
            sc = new Scanner(new File("d:/java/算法/测试数据/" + ti + "-input-" + i + ".txt"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            System.out.println("不存在此输入文件");
        }
        while (sc.hasNextLine()) {
            System.out.println(sc.nextLine());
        }
    }

    public abstract void fun();

    public void test(int i) {

        // 设置流
        ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(bos2);
        PrintStream old = System.out;
        System.setOut(ps);
        FileInputStream fis;
        // 读入
        try {
            sc = new Scanner(new File("d:/java/算法/测试数据/" + ti + "-input-" + i + ".txt"));

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            // 若没有输入文件可以继续执行

        } finally {
            try {

                fis = new FileInputStream("d:/java/算法/测试数据/" + ti + "-output-" + i + ".txt");
                // 调用函数

                fun();

                // 读取,检测

                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int length = -1;
                while ((length = fis.read(buffer)) != -1) {
                    bos.write(buffer, 0, length);
                }
                bos.close();
                fis.close();
                System.setOut(old);
                String a = bos.toString().replaceAll("\\s", "").replaceAll(" ", "");
                String b = bos2.toString().replaceAll("\\s", "").replaceAll(" ", "");
                System.out.print(i + ":" + a.equalsIgnoreCase(b));


                if (!a.equalsIgnoreCase(b)) {
                    System.out.println("您的输出:" + bos2.toString());
                    System.out.println("标准输出:" + bos.toString());
                }
            } catch (FileNotFoundException e2) {
                System.exit(0);
            }catch(IOException e3){
                System.exit(0);
            }
        }

    }

}


使用用例
[Java] 纯文本查看 复制代码
public class Main11 {

    public static void main(String[] args) {
        LT lt=new LT("字符串对比") {
            @Override
            public void fun() {
                String s1=sc.nextLine();
                String s2=sc.nextLine();
                if(s1.length()!=s2.length()){
                    System.out.println(1);
                }else{
                    if(s1.equals(s2)){
                        System.out.println(2);
                    }else if(s1.equalsIgnoreCase(s2)){
                        System.out.println(3);
                    }else{
                        System.out.println(4);
                    }
                }
            }
        };
        lt.run();
    }

}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2020-2-28 13:18
申请前应该先测试好账号有效性,用户名早被注册了。
吾爱游客  发表于 2020-2-28 22:30
Hmily 发表于 2020-2-28 13:18
申请前应该先测试好账号有效性,用户名早被注册了。

那就casual233
Hmily 发表于 2020-2-29 12:43
I D:casual233
邮箱:314957231@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。
Hmily 发表于 2020-3-8 16:34
未报到,账号注销。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表