完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
问题描述
有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 #include 《stdio.h》 int n; int a[20][20]; int num[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) { num[j]++; //记录每一列的1 的个数 ,用于判断是否大于n/2 } } int flag=0;//设置输出格式 for(i=1;i《=n;i++) { if(num[i]》n/2) { if(flag==0) { printf(“%d”,i); flag=1; } else printf(“ %d”,i); } } return 0; } 算法思路: 已知好芯片个数大于坏芯片个数。 那么我是待测芯片,其他的芯片来检测我,得到检测值a[j]。 for (j = 0; j 《 n; j++){ k = 0; for (i = 0; i 《 n; i++) { 。.. } } 这也是为什么保持j不变,i变化。 如果我是好的芯片,那么不管坏芯片的干扰,好芯片的检测结果为1的个数绝对大于等于n/2了; 如果我是坏芯片,即使所有的坏芯片对我检测值都为1,由于坏芯片的个数小于n/2,所以总数也是小于n/2的。 |
|
|
|
只有小组成员才能发言,加入小组>>
4508个成员聚集在这个小组
加入小组3334 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4262 浏览 1 评论
4289 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:20 , Processed in 1.030248 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号