iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
自我挑戰組

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

[iT鐵人賽Day28]練習題(7)

第二十八天了,講到練習題第七題
不知不覺已經快結束了,因為篇幅的關係,所以可能無法說完全部的練習題
歷屆練習題只會做到明天,因為最後一天要做個總結
那就進入正題,來說說今天的練習題吧
題目先介紹了薩克斯風的指法
例如: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();
			}
		}
	}
}

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20210928/20140567nXajOI9RkE.png
以上就是練習題第七題的程式碼以及執行結果


上一篇
[iT鐵人賽Day27]練習題(6)
下一篇
[iT鐵人賽Day29]練習題(8)
系列文
JAVA簡易教學+CPE歷屆試題講解30

尚未有邦友留言

立即登入留言