因為參加藍橋杯,這參賽費本身就不便宜。我還去買你們的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("http://s", "").replaceAll(" ", ""); String b = bos2.toString().replaceAll("http://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(); }}新聞熱點
疑難解答