VIP試題 藍橋杯 BASIC 23 晶元測試

2021-10-08 19:53:56 字數 1432 閱讀 8075

問題描述

有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(並不表示該晶元對本身的測試結果。晶元不能對本身進行測試)。

輸出格式

按從小到大的順序輸出所有好晶元的編號

樣例輸入

31 0 1

0 1 0

1 0 1

樣例輸出

1 3思路一:

已知好晶元數比壞的晶元數多,換句話說,也就是只要其他的晶元對乙個晶元的判斷結果是1的個數大於0的個數,就可以判斷這個晶元是乙個好晶元。

思路二:

另一種思路是:若半數以上晶元認為它是好晶元,則它就是好晶元。

原因:題目中說,其中壞的晶元的判斷是隨機的要不是1要不是0,所以對乙個好的晶元(被檢測)的判斷而言,用壞的晶元去判斷(檢測方)這個好的,顯示1和顯示0的概率都是50%,而如果乙個好的晶元(檢測方)去判斷這個好的晶元(被檢測),這個結果一定是1,已知好晶元比壞晶元多,所以乙個好的晶元,被檢測的結果顯示1的總數一定會大於顯示0的個數。

#include

using namespace std;

int main()

;//輸入資料

for(int i=

0;i) cout<}//遍歷篩選,如果此數1的結果大於0,則輸出

for(int i=

0;i)else}if

(flag1>flag0)

}return0;

}

思路二**:

#include

using namespace std;

int main()

;//當某個數得了1時,用b來記錄

int b[21]

=;//記錄1/2的總數是多少

int t=n/2;

for(int i=

0;icout<}for

(int k=

0;kreturn0;

}

藍橋 BASIC 23 晶元測試

基礎練習 晶元測試 問題描述 有n 2 n 20 塊晶元,有好有壞,已知好晶元比壞晶元多。每個晶元都能用來測試其他晶元。用好晶元測試其他晶元時,能正確給出被測試晶元是好還是壞。而用壞晶元測試其他晶元時,會隨機給出好或是壞的測試結果 即此結果與被測試晶元實際的好壞無關 給出所有晶元的測試結果,問哪些晶...

藍橋 BASIC 23 晶元測試

問題描述 有n 2 n 20 塊晶元,有好有壞,已知好晶元比壞晶元多。每個晶元都能用來測試其他晶元。用好晶元測試其他晶元時,能正確給出被測試晶元是好還是壞。而用壞晶元測試其他晶元時,會隨機給出好或是壞的測試結果 即此結果與被測試晶元實際的好壞無關 給出所有晶元的測試結果,問哪些晶元是好晶元。輸入格式...

藍橋杯 BASIC 23 基礎練習 晶元測試

問題描述 有n 2 n 20 塊晶元,有好有壞,已知好晶元比壞晶元多。每個晶元都能用來測試其他晶元。用好晶元測試其他晶元時,能正確給出被測試晶元是好還是壞。而用壞晶元測試其他晶元時,會隨機給出好或是壞的測試結果 即此結果與被測試晶元實際的好壞無關 給出所有晶元的測試結果,問哪些晶元是好晶元。輸入格式...