Master-Mind Hints(猜数字游戏提示)

本题的难点在于求B,如何求B:

题中说B是有多少数字在两个序列都出现过并且位置不对,比如答案序列是1的有2个,猜测序列是1的有1个,我们取其中最小的加到B中,也就是说序列中的每个数字是独立的,尽管大小相等,但是每个相互独立,将这样的每个最小值加到一起便是B的值,但不要忘了还有已经位置相同的数字,所以要把A减掉,才是最终B的值

大佬们真的太nb了orz给各位大佬跪了

#include<stdio.h>

int main(void)
{
    int a[1100], b[1100];
    int n;
    int record = 0;
    while (scanf("%d", &n) && n)
    {
        printf("Game %d:\n",++record);
        //答案序列
        for (int i = 0; i < n; i++)  scanf("%d", &a[i]);
        while (true)
        {
            int A = 0, B = 0;
            //猜测序列
            for (int i = 0; i < n; i++) scanf("%d", &b[i]);
            //判断是否结束猜测
            if (b[0] == 0) break;
            //计算A
            for (int i = 0; i < n; i++)  if (a[i] == b[i])  A++;
            //计算B
            for (int i = 1; i <= 9; i++)
            {
                int c1 = 0, c2 = 0;
                for (int j = 0; j < n; j++)
                {
                    if (a[j] == i) c1++;
                    if (b[j] == i) c2++;
                }
                if (c1 > c2) B += c2;
                else               B += c1;
            }
            //输出结果
            printf("(%d,%d)\n", A, B - A);
        }
    }
    return 0;
}

 

posted @ 2021-01-24 17:06  loliconsk  阅读(220)  评论(0)    收藏  举报