问题描述
有n个(2<n<20)芯片,好的或坏的,并且有比坏的芯片更多的已知的好的芯片。
每个芯片都可以用来测试其他芯片。当用一个好的芯片测试其他芯片时,它可以正确地给出被测芯片是好是坏。当用坏芯片测试其他芯片时,会随机给出好的或坏的测试结果(也就是说,这个结果与被测芯片的实际质量无关)。
给出所有芯片的测试结果,并询问哪些芯片是好的芯片。
输入格式
输入数据的第一个动作是一个整数n,它表示芯片的数量。
n+1的第二行是行为n*n表,每行有n个数据。表中的女生化妆每个数据都是0或1。第i行第j列(1<i,j<n)中的数据表示用i块芯片测试j块芯片时得到的测试结果。1代表好,0代表坏,i=j总是1(不代表芯片本身的测试结果)。芯片不能自我测试。
输出格式
按从小到大的顺序输出所有好芯片的数量。
样本输入

一百零一
010
一百零一
样本输出
十三
C语言参考答案:
包括:
#定义最大值20

In main()
{
int n,text[20][20],i,j,s;//s是坏芯片的数量
scanf(“%d”,&n);

如果(n>=2&&n<=20)
{
对于(i=0;i<n;i++)
{
对于(j=0;j<n;j++)
{
scanf(“%d”,&text[i][j]);
}
}
//清除坏芯片,留下好芯片
对于(j=0;j<n;j++)
{
S=0;
对于(i=0;i<n;i++)
{
S+=文本[I][J];
}
如果(S>N/2)
printf(“%d”,j+1);

}
}
返回0;
}

摘录:
以下两个结论是有用的。首先列出它们。

如果你随机抽取两片芯片进行测试,会有
1)如果结果为真,则两者均为真或假。
2)对于其他结果,至少有一个是错误的。

在任何偶数芯片中,如果好的芯片比坏的芯片多,那么所有的芯片都分为两组。根据抽屉原理,有
1)一组必须有两个好的芯片。
2)好芯片的数量必须大于坏芯片的数量。

测试流程
1)将芯片分为1和2、3和4组。2K-1和2K。如果我们互相测试,我们必须得到与真实组相同的结果。
2)保留与真实组相同的结果并丢弃其他组。好芯片组肯定比坏芯片组多。(因此,当只有两个或更多组为真时,它们必须为真,测试结束)
3)如果结果是真的,芯片将是好的或坏的,因此一半可以丢弃。从所有同一个真实组中,任意取出一个,丢弃另一个,组成一个新的测试组,继续两组或两组,直到同一真实组只有两个或一个测试,坚持到最后才是好的芯片。

解释:同一个真实的群体可能会变得奇怪。当为奇数数组时,选择任意一组(假定为A)和剩余一组进行测试A,如果测试结果A大于或等于芯片的一半,则A更好,测试结束。否则,A是一个坏芯片。如果A是一个好芯片,它一定是一个坏芯片。拆下其余零件后,将形成一个新的测试组,并将继续进行两个或两个组。

总的原则类似于淘金热。一开始有很多好的筹码。当我们取出芯片时,我们必须确保坏芯片的数量必须大于或等于好芯片的数量。这样,我们就可以确保剩余芯片中好芯片的数量大于坏芯片的数量。当组数为奇数时,超过一半的投票有效(同样有效,因为好大于坏,所以相等必须是好的)。

因为一次至少移除一半的芯片,最坏的情况是每次只移除一半的芯片,并以相等的比率减少。当有n个芯片时,测试次数为n+(n/2)+(n/4)…=2n。
特赦

c语言测试芯片好坏的更多相关文章

  1. 51单片机连接24C02-C语言测试代码

    忙了一天多终于透彻了,自己写的不好使,用别人的逐步分析改成自己的,我写得非常简洁易懂. 我总结3点需要注意的地方 1.关闭非IIC通信器件,比如我的开发板SDA和SCL也连接了DS1302,造成干扰会 ...

  2. C语言--测试电脑存储模式(大端存储OR小端存储)

    相信大家都知道大端存储和小端存储的概念,这在平时,我们一般不用考虑,但是,在某些场合,这些概念就显得很重要,比如,在 Socket 通信时,我们的电脑是小端存储模式,可是传送数据或者消息给对方电脑时, ...

  3. Go语言测试代码

    第一次学go语言,测试代码 package main import "fmt" var age int; const sex = 0 func init() { fmt.Print ...

  4. [译] Go语言测试进阶版建议与技巧

    阅读本篇文章前,你最好已经知道如何写基本的单元测试.本篇文章共包含3个小建议,以及7个小技巧. 建议一,不要使用框架 Go语言自身已经有一个非常棒的测试框架,它允许你使用Go编写测试代码,不需要再额外 ...

  5. GO语言测试

    Go语言的测试技术是相对低级的.它依赖一个 go test 测试命令和一组按照约定方式编写的 测试函数,测试命令可以运行这些测试函数.编写相对轻量级的纯测试代码是有效的,而且它很容易延伸到基准测试和示 ...

  6. 一套很有意思的C语言测试题目

    网络上逛博客,发现了一套很有意思的测试题目: https://kobes.ca/ 大家有兴趣可以做一下,考一些关于C语言使用的细节: 中文翻译参考: https://www.cnblogs.com/l ...

  7. Go语言测试:testing

    学习参考来源:https://www.liwenzhou.com/posts/Go/16_test/ go test工具 必须导入包: import "testing" go te ...

  8. 2017-2018-1 20155315 《信息安全系统设计基础》嵌入式C语言测试

    Hours 要求 伪代码 提取Hours 提取时间地址 时间存放在(基址+2)的16位寄存器中,定义一个时间宏存放地址. #define Time_Addr 0xFFFFC0000 #define T ...

  9. Criterion - 一个简单可扩展的 C 语言测试框架

    A dead-simple, yet extensible, C test framework. Philosophy Most test frameworks for C require a lot ...

随机推荐

  1. Docker镜像搭建ubuntu下samba目录共享

    第一种方法:(未使用) yum install docker // 下载镜像 docker pull dperson/samba // 启动镜像,具体看文档,但重要的配置是以下的注释 docker r ...

  2. 谈谈我对证券公司一些部门的理解(前、中、后台)[z]

    [z]https://blog.csdn.net/UniRong/article/details/79289947 文中对各大部门的分析都是从作者多年经历总结出来的有感之谈,尤其是前台的6大部门(经纪 ...

  3. java配置SSM框架下的redis缓存

    pom.xml引入依赖包 <!--jedis.jar --> <dependency> <groupId>redis.clients</groupId> ...

  4. Mysql执行查询语句慢的解决方式

    MySQL使用的是InnoDB引擎.不同于MyISAM引擎只提供表锁,InnoDB提供不同级别的锁.但是在我们日常的操作过程中经常由于对数据库不当的SQL操作导致出现长时间的锁,造成其他的SQL语句长 ...

  5. maven项目pom.xml中使用不同源的jar/自定义仓库地址

    笔者本地使用aliyun的maven仓库,在github上找了一个jar,他需求使用第三方仓库. 比如要使用https://jitpack.io上面com.github.navinilavarasan ...

  6. 等待数据库引擎恢复句柄失败 SqlServer2012安装时报错 Win10

    上周,在一批Win10系统电脑上安装SqlServer 2012时,屡次发生报错,安装失败,显示的失败信息是:等待数据库引擎恢复句柄失败 如下图所示: 面对这样的错误,我的第一反应是百度,在百度上找了 ...

  7. koa2中间件

    在我看来,前端框架的中间件的思想来源于传统后端的切面编程(AOP)思想,比如我们常见的身份校验(JWT). axios的拦截器也是基于这种程序设计模式的. 在koa中,实际上是由一个数组对象来保存所有 ...

  8. iptable规则的执行顺序

    众所周知,iptable的中包含了各种各样的table和规则链条.这篇博文对规则链的执行顺序做一个简单的介绍. Chain OUTPUT (policy ACCEPT)target prot opt ...

  9. B. Grow The Tree Codeforces Round #594 (Div. 2)

    Gardener Alexey teaches competitive programming to high school students. To congratulate Alexey on t ...

  10. 【FFMPEG】谈谈RTP传输中的负载类型和时间戳

    谈谈RTP传输中的负载类型和时间戳 最近被RTP的负载类型和时间戳搞郁闷了,一个问题调试了近一周,终于圆满解决,回头看看,发现其实主要原因还是自己没有真正地搞清楚RTP协议中负载类型和时间戳的含义.虽 ...