藍橋杯-----基礎訓練--報時助手、晶片測試(Java)解法
阿新 • • 發佈:2019-01-28
一、報時助手
問題描述:
給定當前的時間,請用英文的讀法將它讀出來。時間用時h和分m表示,在英文的讀法中,讀一個時間的方法是:
如果m為0,則將時讀出來,然後加上“o'clock”,如3:00讀作“three o'clock”。
如果m不為0,則將時讀出來,然後將分讀出來,如5:30讀作“five thirty”。
時和分的讀法使用的是英文數字的讀法,其中0~20讀作:
0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。
30讀作thirty,40讀作forty,50讀作fifty。
對於大於20小於60的數字,首先讀整十的數,然後再加上個位數。如31首先讀30再加1的讀法,讀作“thirty one”。
按上面的規則21:54讀作“twenty one fifty four”,9:07讀作“nine seven”,0:15讀作“zero fifteen”。
二、解題思想:
這道題的輸入為兩個元素,所以需要對這兩個元素分別處理。涉及的知識無非是數字與字串的對應關係,而swicth-case語句可以很好的解決這個問題。首先是小時元素,它的數字出現範圍只能是0-23,所喲利用swicth-case語句進行數字對應字串的判段與相關字串的輸出。最後是分,由於分的數值區間是0-59,故當其大於了19後,其對應的讀法就變了,需要對十位與個位進行分別的判斷與字串的輸出。
下面給出解題程式碼:
二、晶片測試import java.util.Scanner; public class 報時助手 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int h = sc.nextInt(); int m = sc.nextInt(); sc.close(); if(m==0) { switch(h){ case 0:System.out.print("zero");break; case 1:System.out.print("one");break; case 2:System.out.print("two");break; case 3:System.out.print("three");break; case 4:System.out.print("four");break; case 5:System.out.print("five");break; case 6:System.out.print("six");break; case 7:System.out.print("seven");break; case 8:System.out.print("eight");break; case 9:System.out.print("nine");break; case 10:System.out.print("ten");break; case 11:System.out.print("eleven");break; case 12:System.out.print("twelve");break; case 13:System.out.print("thirteen");break; case 14:System.out.print("fourteen");break; case 15:System.out.print("fifteen");break; case 16:System.out.print("sixteem");break; case 17:System.out.print("seventeen");break; case 18:System.out.print("eighteen");break; case 19:System.out.print("nineteen");break; case 20:System.out.print("twenty");break; case 21:System.out.print("twenty one");break; case 22:System.out.print("twenty two");break; case 23:System.out.print("twenty three");break; } System.out.print(" o'clock"); } else { switch(h){ case 0:System.out.print("zero");break; case 1:System.out.print("one");break; case 2:System.out.print("two");break; case 3:System.out.print("three");break; case 4:System.out.print("four");break; case 5:System.out.print("five");break; case 6:System.out.print("six");break; case 7:System.out.print("seven");break; case 8:System.out.print("eight");break; case 9:System.out.print("nine");break; case 10:System.out.print("ten");break; case 11:System.out.print("eleven");break; case 12:System.out.print("twelve");break; case 13:System.out.print("thirteen");break; case 14:System.out.print("fourteen");break; case 15:System.out.print("fifteen");break; case 16:System.out.print("sixteem");break; case 17:System.out.print("seventeen");break; case 18:System.out.print("eighteen");break; case 19:System.out.print("nineteen");break; case 20:System.out.print("twenty");break; case 21:System.out.print("twenty one");break; case 22:System.out.print("twenty two");break; case 23:System.out.print("twenty three");break; } if(m<=20) { switch(m){ case 0:System.out.print(" zero");break; case 1:System.out.print(" one");break; case 2:System.out.print(" two");break; case 3:System.out.print(" three");break; case 4:System.out.print(" four");break; case 5:System.out.print(" five");break; case 6:System.out.print(" six");break; case 7:System.out.print(" seven");break; case 8:System.out.print(" eight");break; case 9:System.out.print(" nine");break; case 10:System.out.print(" ten");break; case 11:System.out.print(" eleven");break; case 12:System.out.print(" twelve");break; case 13:System.out.print(" thirteen");break; case 14:System.out.print(" fourteen");break; case 15:System.out.print(" fifteen");break; case 16:System.out.print(" sixteem");break; case 17:System.out.print(" seventeen");break; case 18:System.out.print(" eighteen");break; case 19:System.out.print(" nineteen");break; case 20:System.out.print(" twenty");break; } } else { int temp1 = m/10; int temp2 = m%10; switch(temp1){ case 2:System.out.print(" twenty");break; case 3:System.out.print(" thirty");break; case 4:System.out.print(" forty");break; case 5:System.out.print(" fifty");break; } switch(temp2){ case 0:System.out.print(" zero");break; case 1:System.out.print(" one");break; case 2:System.out.print(" two");break; case 3:System.out.print(" three");break; case 4:System.out.print(" four");break; case 5:System.out.print(" five");break; case 6:System.out.print(" six");break; case 7:System.out.print(" seven");break; case 8:System.out.print(" eight");break; case 9:System.out.print(" nine");break; } } } } }
問題描述:有n(2≤n≤20)塊晶片,有好有壞,已知好晶片比壞晶片多。
每個晶片都能用來測試其他晶片。用好晶片測試其他晶片時,能正確給出被測試晶片是好還是壞。而用壞晶片測試其他晶片時,
三、解題思想
根據題目的要求可以知道共有兩個關鍵的問題點:1)由於好晶片的數量要多於壞晶片的數量
2)說真話的一定是好晶片,說假話的一定是假晶片。
所以可以總結出:一片晶片被人說是好的個數大於總數的一半則其一定是真的。
下面給出解題程式碼:
import java.util.Scanner;
public class 晶片測試 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s[][] = new int[n][n];
int sum = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
s[i][j] = sc.nextInt();
}
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
sum += s[j][i];
}
if(sum > n/2)
{
System.out.print((i+1)+" ");
}
sum = 0;
}
}
}
這道題邏輯思想強一點的人很好理解,弱一點的可以將資料帶入嘗試驗證即可理解。