用C++實現:芯片測試


問題描述
  有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
 
思路:已知好芯片數目比壞芯片數目多,而且當遇到一個好的芯片的時候,用壞芯片去檢測,有可能檢驗結果正確,有可能錯誤,而拿合格的芯片去檢測,則檢驗結果一定是合格,所以如果在檢驗一個芯片的時候,其他芯片表示1的個數大於芯片總數的一半,就可以說明這個正在被檢測的芯片是好的芯片。
 
 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 class chips
 6 {
 7 public:
 8     int get_n()  //獲取芯片個數
 9     {
10         cin >> n;
11         return n;
12     }
13 
14     int get_all_chips()   //初始化原來所有芯片
15     {
16         for(int i=1;i<=n;i++)
17         {
18             for(int j=1;j<=n;j++)
19             {
20                 cin>>all_chips[i][j];
21             }
22         }
23         return 0;
24     }
25 
26     int check_chips()  //篩選出合格的芯片
27     {
28         for(int i=1;i<=n;i++)
29         {
30             for(int j=1;j<=n;j++)
31             {
32                 if(all_chips[i][j]==1)
33                 {
34                     qualified_chips[j]++;
35                 }
36             }
37         }
38     }
39 
40     int print_qualified_chips()  //輸出函數
41     {
42         int flag=0;   //用flag來控制輸出格式
43         for(int i=1;i<=n;i++)
44         {
45             if(qualified_chips[i]>n/2)
46             {
47                 if(flag==0)
48                 {
49                     cout << i;
50                     flag=1;
51                 }
52                 else
53                 {
54                     cout<<" "<<i;
55                 }
56             }
57         }
58     }
59 private:
60     int all_chips[21][21];   //所有芯片
61     int qualified_chips[21]={0};   //合格芯片
62     int n;
63 };
64 
65 int main(void)
66 {
67     chips chip;
68     chip.get_n();
69     chip.get_all_chips();
70     chip.check_chips();
71     chip.print_qualified_chips();
72     return 0;
73 }

注意:題目要求i=j的時候不算數,所以在判斷這個芯片是否符合條件的時候,用的>而不是>=,如果在判斷的時候考慮進去,就加一個等號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM