HDU 1172 猜数字

来源:互联网 发布:linux权威指南 编辑:程序博客网 时间:2024/06/04 18:39


枚举所有的四位数,找到符合条件的,设置一个数组记录0~9出现次数再比较穷举的数,算出每个数字出现达标数量,判断位置就更容易了,直接比较就行了,数据量最大100*10000,无需考虑无解情况,有一个解就时可以确定,多个解就不能确定。

#include<stdio.h>#include<string.h>int main(){    char a[102][4];    int i,j,n,x[102],y[102];    while(~scanf("%d",&n)&&n)    {        for(i=0; i<n; i++)        {            scanf("%s %d %d",a[i],&x[i],&y[i]);        }        int e=0,f;        short b[11];        for(j=1000; j<=9999; j++)        {            int X=0,Y=0;            memset(b,0,sizeof(b));            int a1=j/1000,a2=(j%1000)/100,a3=(j%100)/10,a4=j%10;            int sum=0;            for(i=0; i<n; i++)            {                b[a1]++;                b[a2]++;                b[a3]++;                b[a4]++;                X=0,Y=0;                if(b[(a[i][0]-'0')])                    X++,b[(a[i][0]-'0')]--;                if(b[(a[i][1]-'0')])                    X++,b[(a[i][1]-'0')]--;                if(b[(a[i][2]-'0')])                    X++,b[(a[i][2]-'0')]--;                if(b[(a[i][3]-'0')])                    X++,b[(a[i][3]-'0')]--;                    memset(b,0,sizeof(b));                if(a1==a[i][0]-'0')                    Y++;                if(a2==a[i][1]-'0')                    Y++;                if(a3==a[i][2]-'0')                    Y++;                if(a4==a[i][3]-'0')                    Y++;                if(X==x[i]&&Y==y[i])                    sum++;            }            if(sum==n)            {                f=j;                e++;            }            if(e>1)                break;        }        if(e>1)            printf("Not sure\n");        else            printf("%d\n",f);    }    return 0;}


1 0
原创粉丝点击