题目书P50页
int main() { //猜数字的提示
int n, a[maxn], b[maxn];
int kase = 0;
while (scanf("%d", &n) == 1 && n) {
printf("Game %d:\n", ++kase);
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;
for (int d = 1; d <= 9; d++) {
int c1 = 0, c2 = 0;
for (int i = 0; i < n; i++) {
if (a[i] == d) c1++;
if (b[i] == d) c2++;
}
if (c1 < c2) B += c1; else B += c2;
}
printf(" (%d,%d)", A, B - A);
}
}
return 0;
}
这里的for循环很多,但是比较清楚。其中我的几个疑问点有
1.while的条件。scanf(“%d”,&n) == 1 的意思为输入的n如果是int整型返回值会为1,也就是正确。并不是说输入的n是几就和1进行比较。
2.for(;;)与while(true)表现一致,都将在循环体里出现break后跳出循环。
3.其中找到c1,c2的值然后用其算出B这个循环有点懵。可以以后多反复回来体会。(其为 统计1~9在两个数组中出现的次数,min(c1,c2)就是该数字对B的贡献。
4.在输入n后注意其中数组1 3 5 5输入时要在数字之间加入空格,否则无法判断是一位数字1355还是四位数字1 3 5 5。这样才会完成程序进行输出
上图为无空格的情况,无法结束
上图为有空格正确情况。