uva 340 Master-Mind Hints

来源:互联网 发布:卖家网wish数据是什么 编辑:程序博客网 时间:2024/04/30 08:34

题意:题目给出一个目标串,然后附后给出几个串(只由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;}