zoukankan      html  css  js  c++  java
  • [蓝桥杯][基础训练]芯片测试

    Description

    有n(2 ≤ n ≤ 20)块芯片,有好有坏,已知好芯片比坏芯片多。

    每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。

    而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。

    给出所有芯片的测试结果,问哪些芯片是好芯片。

    Input

    输入数据第一行为一个整数n,表示芯片个数。

    第二行到第n+1行为n*n的一张表,每行n个数据。

    表中的每个数据为0或1,在这n行中的第i行第j列(1 ≤ i, j ≤ n)的数据表示用第i块芯片测试第j块芯片时得到的测试结果,1表示好,0表示坏,i=j时一律为1(并不表示该芯片对本身的测试结果。芯片不能对本身进行测试)。

    Output

    按从小到大的顺序输出所有好芯片的编号。

    Sample Input

    3
    1 0 1
    0 1 0
    1 0 1
    

    Sample Output

    1 3
    


     1 #include<stdio.h>
     2 int main(){
     3     int n,num=0,a[21][21];
     4     scanf("%d",&n);
     5     for(int i=1;i<=n;i++){
     6         for(int j=1;j<=n;j++){
     7             scanf("%d",&a[i][j]);
     8         }
     9     }
    10     for(int i=1;i<=n;i++){
    11         num=0;
    12         for(int j=1;j<=n;j++){
    13             if(a[j][i]==1)
    14                 num++;
    15         }
    16         if(num*2>n)
    17             printf("%d ",i);
    18     }
    19     return 0;
    20 }

    这道题要自己想可还真想不出这样简单的算法

    题目里的一个重要条件就是:好的零件数量大于坏的零件数量

    这样的话,随便拿一个零件,

    看所有零件对他的评价,如果为1的数量大于n的话,该零件就是好的

    举个栗子

    假如一共有60个零件,那么好的零件最少有31个

    坏的零件最多有29个

    随便拿一个零件,

    假如这个零件是好的,

    那么在最坏的情况下

    他得到的1的数量也是31

    乘2后就大于60了

    所以他是好的

    如果它是坏的

    那么在最好的情况下

    它能得到29个1

    乘2后还是不大于60

    所以他是坏的

    O(∩_∩)O




  • 相关阅读:
    android焦点
    URI和URL的区别比较与理解
    Android Bundle类
    repo命令
    ubuntu adb找不到设备
    【python】-网络编程
    【python】-反射
    【python】-类的特殊成员方法
    【python】-7-面向对象的进阶
    【python】-多态
  • 原文地址:https://www.cnblogs.com/fate-/p/12289204.html
Copyright © 2011-2022 走看看