2017/05/23 CPE
題目:https://cpe.cse.nsysu.edu.tw/cpe/file/attendance/problemPdf/12195.pdf
大概題意:
就是計算節拍,一節音一拍,計算有幾組式對的並且印出。題目有給出每個英文代碼代表幾拍。EX:H為1/2,只有2個H則符合一拍。如果是HW,1+1/2則不為一拍。
input:
每組節拍都用"/"分隔,頭尾都有"/"。不會一開始就知道有幾組,讀到*
代表結束。
output:
計算每組有幾個符合為1拍的組數。
import java.util.Scanner;
public class JingleComposing {
public static void main(String[] args){
char[] charSet={'W','H','Q','E','S','T','X'};
//似乎要強制轉型才有效= =
float[] during={1,(float)1/2,(float)1/4,(float)1/8,(float)1/16,(float)1/32,(float)1/64};
String tmp;
Scanner scanner=new Scanner(System.in);
//一組case,如果不是"*"才能執行,順便讀取一行丟給tmp,再做後續的分析。
while(!(tmp=scanner.nextLine()).equals("*")){
//這case對的(=1拍)組數
int setCount=0;
//計算一組的for迴圈。split後,丟給for-each迴圈內的s。
//s就是那些HH,QQQQ之類的東西了
for(String s:tmp.split("/")){
//計算是否為一拍,EX:1/2+1/2
float floatCount=0;
for(int i=0;i<s.length();i++){
//一個一個比對,我用兩組陣列,
//找出對應的index後,再給另一個浮點數陣列
for(int j=0;j<charSet.length;j++){
if(s.charAt(i)==charSet[j]){
floatCount+=during[j];
}
}
}
//確定為1拍,對的組數+1
if(floatCount==1){
setCount++;
}
}
System.out.println(setCount);
}
scanner.close();
}
}
測試資料:https://cpe.cse.nsysu.edu.tw/cpe/file/attendance/problemPdf/testData/uva12195a.php