解析:1)好的芯片比坏的多。
2)坏的芯片无论检查好的还是坏的,都是随机的0或1(50%)
3)芯片不能检查自己,i=j时结果统一为1。
第j列就是其他芯片测试j的结果,题目中说好的好芯片的数量大于坏芯片的数量,那么我们就统计j列的数字1多点还是0多点,就可以判断芯片的好坏了
#include<iostream>
using namespace std;
int a[21][21];
int cnt[21];
int main()
{
int n;
cin>>n; //输入芯片个数
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j]; //输入每次芯片测试结果
if(i!=j && a[i][j]==1){
//自己对自己不能判断是否有效,
//如果其他芯片判断当前芯片有效,cnt++
cnt[j]+=1;
}
}
}
for(int i=1;i<=n;i++){
if(cnt[i]>=n/2)
//因为好的芯片多于坏的芯片,所以一个芯片被判断好的次数>=n/2时
//说明确实是好的芯片
cout<<i<<" ";//输出结果
}
return 0;
}
输入样例:
8
1 0 1 0 1 1 0 1
0 1 0 1 1 1 0 1
1 0 1 0 1 1 0 1
0 1 0 1 1 0 0 1
1 0 1 0 1 1 0 1
1 0 1 0 1 1 0 1
0 1 1 1 1 0 0 0
1 0 1 0 1 1 0 1
输出样例:
1 3 5 6 8
评论区