【记录练习】算法竞赛入门经典——例题3-4猜数字游戏的提示

题目书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。这样才会完成程序进行输出

上图为无空格的情况,无法结束

上图为有空格正确情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值