问题描述
有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. OPERQUERY查询,关于效率,或者说正确用法

    原文:https://blog.csdn.net/u013641136/article/details/50379596 做过一个项目,需要在SQLSERVER创建对ORACLE的DBLINK然后通过 ...

  2. Thinkphp5 的sesssion在同一个控制器不同的方法无法获取session的原因和对策

    这一段在用thinkPHP5开发微信小程序接口的时候,在同一个控制器一个方法中存入session,在另一个方法中取出session,一直都是无法取出. 查阅各种资料得到原因:thinkPHP5里面的s ...

  3. TelephonyUtils

    <uses-permission android:name="android.permission.CALL_PHONE"/> import java.util.Arr ...

  4. error: atomic: 没有那个文件或目录

    Linux下编译的时候遇到一个问题,就是提示    error: atomic: 没有那个文件或目录 执行的命令是gcc -o myCXXLog myCXXLog.c 经过网上搜索,解决方法有二 (1 ...

  5. MongoDB Input

    Configure Connection Tab Host name(s) or IP address(es):网络名称或者地址.可以输入多个主机名或IP地址,用逗号分隔.还可以通过将主机名和端口号与 ...

  6. Go项目实战:打造高并发日志采集系统(一)

    项目结构 本系列文章意在记录如何搭建一个高可用的日志采集系统,实际项目中会有多个日志文件分布在服务器各个文件夹,这些日志记录了不同的功能.随着业务的增多,日志文件也再增多,企业中常常需要实现一个独立的 ...

  7. iOS开发UIkit动力学UIDynamicAnimator一系列动画

    UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性. UIAttachmentBehavior(吸附),UICollisionBehavior(碰撞),UIGravityB ...

  8. 关于Linux系统打开最大文件数量

    今天做压力测试 客户端数据提到2000人,在这个过程中,遇到了分配socket失败的问题提示 errno:24 Too many open files查找资料后发现是Linux系统配置了打开文件的最大 ...

  9. ETH挖矿

    转载声明:http://www.120btc.com/baike/coin/1021.html (仅为了方便自己及原文章被删除) 最近以太坊大涨市值成为仅次比特币的第二大数字货币,那么以太坊(ETH) ...

  10. Python学习笔记——集合

    1. 定义 num = {} print(type(num)) num2 = {1,2,3,4,5} print(type(num2)) <class 'dict'> <class ...