第二十八天了,講到練習題第七題
不知不覺已經快結束了,因為篇幅的關係,所以可能無法說完全部的練習題
歷屆練習題只會做到明天,因為最後一天要做個總結
那就進入正題,來說說今天的練習題吧
題目先介紹了薩克斯風的指法
例如:c要按2-4跟7-10
d要按2-4跟7-9
e要按2-4跟7、8
f要按2-4跟7
g要按2-4
a要按2、3
b要按2
C要按3
D要按1-4跟7-9
E要按1-4跟7、8
F要按1-4跟7
G要按1-4
A要按1-3
B要按1、2
然後題目要求我們做一個程式
用來記錄薩克斯風每個手指按了幾次
以第一個cdefgab為例
c= 2-4 7-10. d= 2-4 7-9
因為c跟d的2-4和7-9的音都有用到所以只算按一次
然後10只有c用到,所以只算按一次
後面有e的2-4跟7、8,因為c已經先按了,所以2-4和7、8還是只算一次
第二行的BAGFEDC也是同樣的道理
第三行就比較不一樣,比較複雜
CbCaDCbCbCCbCbabCCbCbabae
首先C按了3,b按了2然後又回到C,這樣子3就算按了2次、2按了1次
然後a按了2、3,因為C已經按了3,所以3不算,變成3跟2都按2次
以此類推去計算第三行的手指按的次數
然後程式碼如下:
import java.util.*;
public class main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int cases=sc.nextInt();
String all[]={"c0111001111","d0111001110","e0111001100","f0111001000","g0111000000","a0110000000","b0100000000","C0010000000","D1111001110","E1111001100","F1111001000","G1111000000","A1110000000","B1100000000"};
for(int i=0;i<cases;i++){
String current="0000000000";
int time[]=new int[10];
String line=sc.next();
for(int j=0;j<line.length();j++){
String tem="";
for(int k=0;k<all.length;k++)
if(line.charAt(j)==all[k].charAt(0)){
tem=all[k];
break;
}
tem=tem.substring(1);
for(int k=0;k<current.length();k++)
if(tem.charAt(k)!=current.charAt(k) && tem.charAt(k)=='1')
time[k]++;
current=tem;
}
for(int k=0;k<current.length();k++){
if(k!=current.length()-1)
System.out.print(time[k]+" ");
else
System.out.print(time[k]);
}
System.out.println();
}
}
}
}
執行結果如下:
以上就是練習題第七題的程式碼以及執行結果