• 芯片测试


    一、写在前面

    抽屉原理:

      桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。” 抽屉原理有时也被称为鸽巢原理。它是组合数学中一个重要的原理。

    第一抽屉原理

    原理1: 把多于n+1个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件。

     

    证明(反证法):如果每个抽屉至多只能放进一个物体,那么物体的总数至多是n×1,而不是题设的n+k(k≥1),故不可能。

    原理2 :把多于mn(m乘n)+1(n不为0)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于(m+1)的物体。

    证明(反证法):若每个抽屉至多放进m个物体,那么n个抽屉至多放进mn个物体,与题设不符,故不可能。

    原理3 :把无穷多件物体放入n个抽屉,则至少有一个抽屉里 有无穷个物体。

    原理1 、2 、3都是第一抽屉原理的表述。

    第二抽屉原理

    把(mn-1)个物体放入n个抽屉中,其中必有一个抽屉中至多有(m—1)个物体(例如,将3×5-1=14个物体放入5个抽屉中,则必定有一个抽屉中的物体数少于等于3-1=2)。

     

    二、问题描述

      有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

     

    六、问题思路:

    在任意偶数多的芯片里,如果好芯片多于坏芯片,将所有芯片两两分组,根据抽屉原理,则有
    1)必有两个好芯片分在一组。
    2)同为好芯片的组数一定多于同为坏芯片的组数。

    当Cout的值大于等于n/2即为好芯片,自身不能测试自身。

    七、代码部分

     1 #include<stdio.h>
     2 int a[20][20];
     3 int main()
     4 {
     5     int n,ans;
     6     int i,j;
     7     scanf("%d",&n);
     8 
     9     for(i=0; i<n; i++)
    10     {
    11         for(j=0; j<n; j++)
    12         {
    13             scanf("%d",&a[i][j]);
    14         }
    15     }
    16     for(i=0; i<n; i++)
    17     {
    18         ans=0;
    19         for(j=0; j<n; j++)
    20         {
    21             if(i!=j)
    22                 ans+=a[j][i];
    23         }
    24         if(ans>=n/2)
    25         {
    26             printf("%d ",i+1);
    27         }
    28     }
    29     return 0;
    30 }

     参考链接:[1]https://baike.baidu.com/item/%E6%8A%BD%E5%B1%89%E5%8E%9F%E7%90%86/233776?fr=aladdin

    [2]https://blog.csdn.net/jyl1159131237/article/details/78630761

    雪儿言
  • 相关阅读:
    [转载]Linux 线程实现机制分析
    Linux命令学习总结:cp命令
    ORA-01012: not logged on
    TNS-12540: TNS:internal limit restriction exceeded
    ORACLE临时表空间总结
    ORACLE回收站机制介绍
    SQL Server 2008 R2 Service Pack 3 已经发布
    python中的单下划线和双下划线意义和作用
    redis基本命令的演示:
    redis百度百科和维基百科知识总结:
  • 原文地址:https://www.cnblogs.com/weixq351/p/8987490.html
Copyright © 2020-2023  润新知