hdu 1172 猜数字(暴力枚举)

题目

这是一道可以暴力枚举的水题。

//以下两个都可以ac,其实差不多一样,呵呵

//1:

//4 wei shu
#include<stdio.h>
struct tt
{
    char a[5],b[5],c[5];
}e[110];

int main()
{
    int n,i,count,j,num[5],mark[5],yi,flag,a1,a2,a3,a4;
    while(scanf("%d",&n),n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%s%s%s",e[i].a,e[i].b,e[i].c);
        }
        yi=0;flag=0;
        num[0]=1;num[1]=num[2]=num[3]=0;
        for(j=1000;j<10000;j++)
        {
            for(i=0;i<n;i++)
            {
                count=0;
                for(int ii=0;ii<4;ii++)
                    if(num[ii]==e[i].a[ii]-'0')
                        count++;
                if(count!=e[i].c[0]-'0')break;

                for(int q=0;q<5;q++)mark[q]=0;

                count=0;
                for(int ii=0;ii<4;ii++)
                {
                    for(int jj=0;jj<4;jj++)
                    {
                        if(num[ii]==e[i].a[jj]-'0'&&mark[jj]==0)
                        {mark[jj]=1,count++;break;}
                    }
                }
                if(count!=e[i].b[0]-'0')break;
            }
            if(i==n)
            {
                flag++;
                if(yi==0)a1=num[0],a2=num[1],a3=num[2],a4=num[3],yi=1;
            }
            num[3]++;
            if(num[3]>9)//原来之前是这里细节出错了,要注意哦
                num[2]++,num[3]=num[3]%10;            
            if(num[2]>9)
                num[1]++,num[2]=num[2]%10;
            if(num[1]>9)
                num[0]++,num[1]=num[1]%10;
            num[0]=num[0]%10;
        }
        if(flag==1)
            printf("%d%d%d%d
",a1,a2,a3,a4);
        else
            printf("Not sure
");
    }
    return 0;
}
View Code

//2:

#include<stdio.h>
struct tt
{
    char a[5],b[2],c[2];
}e[105];
int main()
{
    int n,i,count,j,num[4],flag,a1,a2,a3,a4;
    bool yi,mark[4];
    while(scanf("%d",&n),n)
    {
        for(i=0;i<n;i++)scanf("%s%s%s",e[i].a,e[i].b,e[i].c);
        yi=false;
        num[0]=num[1]=num[2]=num[3]=flag=0;
        for(j=1;j<10000;j++)
        {
            for(i=0;i<n;i++)
            {
                count=0;
                for(int ii=0;ii<4;ii++)
                    if(num[ii]==e[i].a[ii]-'0')count++;
                if(count!=e[i].c[0]-'0')break;

                for(int q=0;q<4;q++)mark[q]=false;

                count=0;
                for(int w=0;w<4;w++)
                    for(int r=0;r<4;r++)
                        if(num[w]==e[i].a[r]-'0'&&!mark[r])
                        {mark[r]=true,count++;break;}
                if(count!=e[i].b[0]-'0')break;
            }
            if(i==n){
                flag++;
                if(!yi)a1=num[0],a2=num[1],a3=num[2],a4=num[3],yi=true;
            }
            num[3]++;
            if(num[3]>9)num[2]++,num[3]=num[3]%10;    //原来之前是这里细节出错了,要注意哦        
            if(num[2]>9)num[1]++,num[2]=num[2]%10;
            if(num[1]>9)num[0]++,num[1]=num[1]%10;
            num[0]=num[0]%10;
        }
        if(flag==1)printf("%d%d%d%d
",a1,a2,a3,a4);
        else printf("Not sure
");
    }
    return 0;
}
View Code

//不过2很神奇的是0毫秒,原因不详

一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3531878.html