题目描述
将2片芯片(A和B)置于测试台上,互相进行测试,测试报告是“好”或“坏”,只取其一。假设好芯片的报告一定是正确的,坏芯片的报告是不确定的(可能会出错)。输入n片芯片,其中好芯片至少比坏芯片多1片。设计一种测试方法,通过测试从n片芯片中挑出1片好芯片。
输入
第一行是一个整数n,表示芯片数。
第二行是n个整数,表示芯片“好”或“坏”的整数(任意整数,不一定是1或0)。
输出
好芯片的编号(从1开始计)。
样例输入
7
1 1 1 1 0 0 0
样例输出
1
代码
#include <stdio.h>
void chiptest(int arr[], int n) {
int i, j, k;
int a[10];
for (i = 0; i < n; i++) {
a[i] = i + 1;
}
k = n;
while (k > 3) {
j = 0;
for (i = 0; i < k / 2; i++) {
if (arr[2 * i] == arr[2 * i + 1]) {
arr[j] = arr[2 * i];
a[j] = a[2 * i];
j++;
}
}
if (k % 2) {
arr[j] = arr[k - 1];
a[j] = k;
k = j + 1;
}
else {
k = j;
}
}
if (k == 3) {
if (arr[0] != arr[1]) {
a[0] = a[2];
}
else if (arr[1] != arr[2]) {
a[0] = a[0];
}
else if (arr[0] != arr[2]) {
a[0] = a[1];
}
printf("%d", a[0]);
}
else if (k == 2 || k == 1) {
printf("%d", a[0]);
}
}
int main() {
int n, i, cp[40];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &cp[i]);
}
chiptest(cp, n);
return 0;
}
测试 And 结果