简易实现蓝桥评测系统
来源:互联网 发布:阿里云国际版支付方式 编辑:程序博客网 时间:2024/04/30 01:01
因为参加蓝桥杯,这参赛费本身就不便宜。我还去买你们的vip么?
但是在练习中有的题目只有vip才能看,才能送到系统评测。
我费了很大的劲研究了一套自己写的评测系统。Like this:
首先,下载所有蓝桥评测系统的源码。
链接: 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方法。
接下来,放代码:
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); } } }}
使用用例
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(); }}
- 简易实现蓝桥评测系统
- 蓝桥-入门训练三题 ----用于熟悉评测系统
- 蓝桥--在线评测--入门训练
- 简易调度系统实现
- C++实现简易通讯录系统
- ACM在线测评系统评测程序设计与python实现
- ACM在线测评系统评测程序设计与python实现
- ACM在线测评系统评测程序设计与python实现
- ACM在线测评系统评测程序设计与实现
- 简易中文分词系统实现 c++
- *unix系统下wc简易实现
- C++实现简易log日志系统
- jsp实现简易网上购书系统
- Linux系统下简易进度条的实现
- python实现的简易员工管理系统
- 简易散列表实现电话号码查询系统
- C语言实现简易的信贷系统
- 系统localtime性能评测
- css3 2d转换3d转换以及动画的知识点汇总
- 1044. Shopping in Mars (25)-二分(难)
- 首页视频内循环
- nova 组件-pause/suspend
- Android的log使用
- 简易实现蓝桥评测系统
- 任意地方获取Context
- android 6.0动态权限
- eclipse下properties文件中文乱码的解决方案
- linux 用户及文件权限管理
- 1.Django基本操作
- IntelliJ IDEA 安装插件 (vue)
- 试试排版
- TP框架里excel表里数据导入到数据库