问题描述
有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. JVM菜鸟进阶高手之路一[z]

    https://mp.weixin.qq.com/s/qD1LFmsOiqZHD8iZX97OfA? 问题现象 代码如下,使用 ParNew + Serial Old 回收器组合与使用 ParNew ...

  2. 用Red5搭建支持WEB播放的实时监控视频

    用Red5搭建支持WEB播放的实时监控视频 1. 下载Red5:https://github.com/Red5/red5-server/releases 下载了Red5 1.0.6 release的Z ...

  3. openstack部署dashboard

    1.下载安装包 yum install openstack-dashboard 2.编辑配置文件 cp /etc/openstack-dashboard/local_settings /etc/ope ...

  4. C语言JS引擎

    基础知识 SpiderMonkey 简介 和其他的 JavaScript 引擎一样,SpiderMonkey 不直接提供像 DOM 这样的对象,而是提供解析,执行 JavaSccript 代码,垃圾回 ...

  5. sizeof和strlen函数区别

    一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保 ...

  6. java数据结构之自定义队列

    一.队列的特点 1.队列是线性结构 2.先进先出,先进入队列的排在队列前端,会比后进队列的先出队列.FIFO 二.通过数组来实现队列 //自己实现数组队列,队列的特定就是先进先出 public cla ...

  7. 前端学习(一) body标签(下)

    今日主要内容: 列表标签 <ul>.<ol>.<dl> 表格标签 <table> 表单标签 <fom> 一.列表标签 列表标签分为三种. 1 ...

  8. LOGIT REGRESSION

    Version info: Code for this page was tested in SPSS 20. Logistic regression, also called a logit mod ...

  9. 使用TensorFlow训练SSD(二):数据的准备

    在进行模型的训练之前,需要准备好相关的数据,相关的数据还需要进行标注.这篇博客将使用labelImg标注工具来进行数据的处理. 首先可从https://github.com/tzutalin/labe ...

  10. eclipse控制台界面乱码问题

    一.首先,eclipse的控制台必须用GBK编码,必须满足以下两个条件: 1.Windows---->Preferences---->Workspace---->Text file ...