uva 340 Master-Mind Hints

题意:题目给出一个目标串,然后附后给出几个串(只由1到9构成),要你找出,位置相同且数字相同的有多少个(即strong),位置不同,但数字相同的有多少个(即weak)。注意每个数字只有用一次。

因为只有1到9所以开两个数字,找出每个数字出现了多少次,然后两个数组对比,每次取小的那个累加,最后减去strong的个数,就是weak的个数。         

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int cnt1[15],cnt2[15];
char aim[3000],temp[3000];
int main()
{
    int n,t_cnt=0;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;

        printf("Game %d:\n",++t_cnt);
        int i,len;

        memset(aim,0,sizeof(aim));
        memset(temp,0,sizeof(temp));
        memset(cnt1,0,sizeof(cnt1));
        memset(cnt2,0,sizeof(cnt2));

        getchar();
        gets(aim);
        len=strlen(aim);
        for(i=0;i<len;i++)
        {
            if(isdigit(aim[i])) cnt1[aim[i]-'0']++;
        }

        while(gets(temp))
        {
            int num=0,ans=0;
            if(temp[0]=='0') break;
            len=strlen(temp);
            for(i=0;i<len;i++)
            {
                if(isdigit(temp[i]))
                {
                    if(aim[i]==temp[i]) num++;
                    cnt2[temp[i]-'0']++;
                }
            }
            for(i=1;i<10;i++) ans+=min(cnt1[i],cnt2[i]);
            printf("    (%d,%d)\n",num,ans-num);

            memset(temp,0,sizeof(temp));
            memset(cnt2,0,sizeof(cnt2));
        }
    }
    return 0;
}

你可能感兴趣的:(uva 340 Master-Mind Hints)