晶片測試(C語言)
阿新 • • 發佈:2021-04-01
題目描述
將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 結果