iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

JAVA簡易教學+CPE歷屆試題講解系列 第 27

[iT鐵人賽Day27]練習題(6)

第二十七天來講到第六題練習題
這題題目有點冗長,害得我當時都有點懶得看了
題目大意是:要寫一個程式自動評測系統
輸入規格是:
n組題目資料
n行
m組檢測資料
m行
然後n跟m資料比對
Accepted:資料完全一樣
Presentation Error:有一個以上的字元不一樣,"150" "15 0"這樣算屬於字元不一樣
Wrong answer:如果上面兩種都不符合,就輸出這個
輸出格式:
Run #num: 答案。
Simple input是
https://ithelp.ithome.com.tw/upload/images/20210927/20140567zDmtxzKUTa.png
https://ithelp.ithome.com.tw/upload/images/20210927/20140567QTBVTfYGwk.png
程式碼如下:

import java.util.*;
public class main{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int cases=1;
		int n1;
		while((n1=sc.nextInt())!=0){
			sc.nextLine();
			String s1 = "";
			for(int i=0;i<n1;i++){
				s1+=sc.nextLine();
			}
			int n2=sc.nextInt();
			sc.nextLine();
			String s2 = "";
			for(int i=0;i<n2;i++){
				s2+=sc.nextLine();
			}
			System.out.print("Run #"+cases+": ");
			cases++;
			if(s1.equals(s2) && n1==n2) System.out.println("Accepted "+s1.length());
			else{
				if(s1.replaceAll("\\s","").equals(s2.replaceAll("\\s","")))
					System.out.println("Presentation Error "+s1.length());
				else System.out.println("Wrong Answer "+s1.length());
			} 
		}
	}
}

解題方式上面都講了
這邊稍微講一下答案的呈現方式
如果s1.equals(s2)和n1==n2,&&是代表and,意思是兩個條件都必須成立。
然後輸出Accepted "+s1.length(),s1.length()顯示s1的長度
如果s1.replaceAll("\s","").equals(s2.replaceAll("\s",""))
那輸出Presentation Error "+s1.length(),s1.length()一樣顯示s1的長度
如果兩者都不是就顯示Wrong Answer "+s1.length()。
然後簡單講解一下nextInt跟nextLine的差別
差別在於nextInt只讀取數字,nextLine則整串讀取。
再講解一下Simple input
第一組輸入是n1=2,讀取The answer is : 10
The answer is : 5
第二組輸入是n2=2,讀取The answer is : 10
The answer is : 5
因為兩者輸入一樣,所以輸出Run #1: Accepted 33
其他組資料可以自己稍微練習驗算一下
輸出結果如下:
https://ithelp.ithome.com.tw/upload/images/20210927/201405678ZGm6udaOt.png


上一篇
[iT鐵人賽Day26]練習題(5)
下一篇
[iT鐵人賽Day28]練習題(7)
系列文
JAVA簡易教學+CPE歷屆試題講解30

尚未有邦友留言

立即登入留言