一、解题思路:
”好芯片比坏芯片多“,正是解题的关键。当我们要在一堆质量未知的芯片中检验其中一个芯片的好坏时,需要用其他的芯片对其一一检测。但坏芯片会”说谎“,不能够准确检测出样品的好坏,其检测结果充满了不确定性。此时我们的重点就应该落在”靠谱“的好芯片上,以所有好芯片的检测结果来判断样品的好坏。
当所有的所有的芯片对样品检测完毕后,所有的好芯片都会给出正确且一致的结果(或好或坏),所有的坏芯片给出正确性未知且不一致的结果。但由于”好芯片比坏芯片多“,所以正确的检测结果总比不正确的多,此时只需要统计如果大于n/2的结果是”好“,那么样品芯片质量就为好,大于n/2的结果是”坏“, 那么样品芯片质量就为坏。
#include<stdio.h>
int n;//n个芯片
int a[20][20];//应题目要求设置最大为20*20的数组列表
int sum[20]={0};
int main()
{
int i,j;
scanf("%d", &n);
for (i=1; i<=n; i++)
for (j=1; j<=n; j++){
scanf("%d", &a[i][j]);//依次输入列表中每一个元素
if (a[i][j]==1){
sum[j]++;//记录每一个检测为1的结果,用于判断累积和是否大于n/2
}
}
int flag=0;//设置输出格式
for (i=1; i<=n; i++){
if (sum[i]>n/2){
if (flag==0){
printf("%d", i);
flag=1;
} else {
printf(" %d", i);
}
}
}
return 0;
}