zoukankan      html  css  js  c++  java
  • 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毫秒,原因不详

    一道又一道,好高兴!
  • 相关阅读:
    js点击按钮触发事件的方法(含函数的写法)
    操作文件
    克隆别人的仓库,提交到自己的远程仓库的方法
    时间戳变成 标准时间展示的方法
    还没看的书
    print 和 println的区别
    初学java记录
    java 的一个hellow word 代码解释
    eclipse 创建一个java项目 运行
    Eclipse环境配置
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3531878.html
Copyright © 2011-2022 走看看