题目取自UVa 340,侵删。题目如下:
参考代码如下:
#include<stdio.h>
#define M 100
int main()
{
int n, a[M], b[M], k = 0;
while(scanf("%d", &n)==1&&n){//n为0时结束输入,程序退出
printf("Game %d:\n", ++k);
for(int i = 0; i<n; i++) scanf("%d", &a[i]);//答案序列
for(;;){
int A = 0, B = 0;//注意变量的声明位置
for(int i = 0; i<n; i++){//猜测序列
scanf("%d", &b[i]);
if(a[i]==b[i]) A++;
}
if(b[0]==0) break;//猜测序列中不会有0,所以b[0]为0则退出循环
for(int i = 1; i<10; i++){
int ca = 0, cb = 0;//注意变量的声明位置
for(int j = 0; j<n; j++){
if(a[j]==i) ca++;
if(b[j]==i) cb++;
}
if(ca<cb) B+=ca; else B+=cb;
}
printf(" (%d, %d)\n", A, B-A);//注意B-A
}
}
return 0;
}
简单说几点:
1.A比较容易计算,直接比较a[i]和b[i]即可;而计算B,对于数字1-9出现的次数,
分别统计答案序列和猜测序列中对应的数量,取二者的较小值再减去A即为B
(因为A统计的是数字相同且位置相同的,在B中多余)
2.变量较多,注意变量的声明位置