1. 程式人生 > >藍橋杯 基礎訓練 晶片測試

藍橋杯 基礎訓練 晶片測試

問題描述   有n(2≤n≤20)塊晶片,有好有壞,已知好晶片比壞晶片多。
  每個晶片都能用來測試其他晶片。用好晶片測試其他晶片時,能正確給出被測試晶片是好還是壞。而用壞晶片測試其他晶片時,會隨機給出好或是壞的測試結果(即此結果與被測試晶片實際的好壞無關)。
  給出所有晶片的測試結果,問哪些晶片是好晶片。 輸入格式   輸入資料第一行為一個整數n,表示晶片個數。
  第二行到第n+1行為n*n的一張表,每行n個數據。表中的每個資料為0或1,在這n行中的第i行第j列(1≤i, j≤n)的資料表示用第i塊晶片測試第j塊晶片時得到的測試結果,1表示好,0表示壞,i=j時一律為1(並不表示該晶片對本身的測試結果。晶片不能對本身進行測試)。 輸出格式   按從小到大的順序輸出所有好晶片的編號 樣例輸入 3
1 0 1
0 1 0
1 0 1 樣例輸出

1 3


思路分析:題目中提示好晶片的數量大於壞晶片的數量,意味著當其他晶片對一個晶片進行測試時,如果該晶片為好晶片,則測試結果為 好的數量>壞的數量,反之如果該晶片為壞晶片,則測試結果為 好的數量<壞的數量。這時只需對錶中i(行)進行列遍歷,根據結果進行判斷。

package Basic;

import java.util.Scanner;

public class Basic23 {
	
	public static void main(String[] args){
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
		int[][] result = new int[n][n];//晶片測試結果result
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				result[i][j] = s.nextInt();
		s.close();
		
		for(int i=0;i<n;i++){
			int count = 0;//好的晶片測試數量
			for(int j=0;j<n;j++){
				if(result[i][j] == 1){
					count++;
				}
			if(count>n/2){
				System.out.print((i+1)+" ");
			}
			}
		}
	}
}