1. 程式人生 > >藍橋杯-----基礎訓練--報時助手、晶片測試(Java)解法

藍橋杯-----基礎訓練--報時助手、晶片測試(Java)解法

一、報時助手

    問題描述:

給定當前的時間,請用英文的讀法將它讀出來。
  時間用時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”。
輸入格式   輸入包含兩個非負整數h和m,表示時間的時和分。非零的數字前沒有前導0。h小於24,m小於60。 輸出格式   輸出時間時刻的英文。 樣例輸入 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;
		}  
    }

}

這道題邏輯思想強一點的人很好理解,弱一點的可以將資料帶入嘗試驗證即可理解。