猜数字 HDU

来源:互联网 发布:超级玛丽 跳跃算法 编辑:程序博客网 时间:2024/06/05 22:53
猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。

Input
输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。在接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。当N=0时,输入数据结束。
Output
每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。
Sample Input
64815 2 15716 1 07842 1 04901 0 08585 3 38555 3 224815 0 02999 3 30
Sample Output
3585Not sure
非常完美的一个贪心,让我当成思维题,想了好长时间,下次记得了,首先看看数据范围,能不能靠着暴力来解决,不行了,我们再去想直达的路径。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{  int num[6];}s[110];int n;int vis[5];int temp_num[5];int check(int a,int b,int c,int d){     temp_num[1]=a,temp_num[2]=b,temp_num[3]=c,temp_num[4]=d;     int i;     for(i=1;i<=n;i++){        memset(vis,0,sizeof(vis));        int right_num=0,right_pos=0;        for(int j=1;j<=4;j++){            if(s[i].num[j]==temp_num[j])               right_pos++;            for(int k=1;k<=4;k++){                if(!vis[k]&&s[i].num[j]==temp_num[k]){                    vis[k]=1;                    right_num++;                    break;                }            }        }        if(right_num==s[i].num[5]&&right_pos==s[i].num[6])            continue;        else            break;     }     if(i==n+1)        return 1;     return 0;}int main(){    while(~scanf("%d",&n)&&n){        for(int i=1;i<=n;i++){            for(int j=1;j<=6;j++){                scanf(" %1d",&s[i].num[j]);            }        }        int ans=0,ans_a,ans_b,ans_c,ans_d;        int i,j,k,l;        for(i=0;i<=9;i++){            for(j=0;j<=9;j++){                for(k=0;k<=9;k++){                    for(l=0;l<=9;l++){                        if(check(i,j,k,l)){                              ans++;                              ans_a=i,ans_b=j,ans_c=k,ans_d=l;                        }                    }                }            }        }        if(ans==1)            printf("%d%d%d%d\n",ans_a,ans_b,ans_c,ans_d);        else            printf("Not sure\n");    }    return 0;}


原创粉丝点击