HDU 1172 猜数字

题目地址:点击打开链接

思路:简单枚举,每次输入a,b,c是一个筛选条件,看最后筛下的符合条件的数字的个数是否为1即可,挺考基本功的

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

bool judge[10000];
int num1[10],num2[4];
int num3[10];

int main()
{
    int n,a,b,c,i,j,sum1,sum2;
    int l,m,k,y;
    while(scanf("%d",&n),n)
    {
        memset(judge,true,sizeof(judge));
        while(n--)
        {
            memset(num1,0,sizeof(num1));
            scanf("%d%d%d",&a,&b,&c);
            l = a;
            k = 0;
            while(l)
            {
                m = l % 10;
                num1[m]++;
                num2[k++] = m;
                l /= 10;
            }
            for(i=1000; i<=9999; i++)
            {
                if(judge[i])//每次从上一次符合条件的数字中再筛选
                {
                    sum1 = 0;
                    sum2 = 0;
                    memset(num3,0,sizeof(num3));
                    l = i;
                    y = 0;
                    while(l)
                    {
                        k = l % 10;
                        num3[k]++;
                        if(k == num2[y++])
                            sum1++;
                        l /= 10;
                    }
                    for(j=0; j<10; j++)
                    {
                        sum2 += min(num3[j],num1[j]);
                    }
                    if(sum2 == b && sum1 == c)
                    {
                        judge[i] = true;
                    }
                    else
                        judge[i] = false;
                }
            }
        }
        int sum3 = 0,x;
        for(i=1000; i<=9999; i++)
        {
            if(judge[i])
            {
                sum3++;
                x = i;
            }
        }
        if(sum3 != 1)
            printf("Not sure\n");
        else
            printf("%d\n",x);
    }
    return 0;
}


你可能感兴趣的:(HDU 1172 猜数字)