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