HDU1172 猜数字

来源:互联网 发布:加工中心编程实例 编辑:程序博客网 时间:2024/06/04 18:06

猜数字

                                                  Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)


                                                  Total Submission(s): 4979    Accepted Submission(s): 2920


Problem Description
猜数字游戏是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
 

Author
lwg

暴力解法即可

#include<stdio.h>struct Node{    int a,b,c;}node[105];int judge(int m,int k){    int i,j,num[5],numi[5];    int x=0,y=0;    int mark[5];    for(i=0;i<4;i++)    mark[i]=0;    num[0]=m%10;    num[1]=(m%100)/10;    num[2]=(m%1000)/100;    num[3]=m/1000;    numi[0]=node[k].a%10;    numi[1]=(node[k].a%100)/10;    numi[2]=(node[k].a%1000)/100;    numi[3]=node[k].a/1000;    for(i=0;i<4;i++)    {        if(num[i]==numi[i])          x++;    }    if(x!=node[k].c)        return -1;    for(i=0;i<4;i++)        for(j=0;j<4;j++)        {            if(num[i]==numi[j]&&mark[j]==0)            {                mark[j]=1;                y++;                break;            }        }    if(node[k].b!=y)        return -1;    return 0;}int main(){    int n;    while(scanf("%d",&n),n!=0)    {        int i,j,p,count=0,num;        for(i=0;i<n;i++)        scanf("%d %d %d",&node[i].a,&node[i].b,&node[i].c);        for(i=1000;i<=9999;i++)        {            for(j=0;j<n;j++)            {                p=judge(i,j);                if(p==-1)                    break;            }            if(p==0)            {                count++;                num=i;            }        }        if(count==1)//要确定是唯一一个数字            printf("%d\n",num);        else            printf("Not sure\n");    }    return 0;}
我做题的时候把其中一段对num数组和numi的数组的初始化,改了一下,然后就一直没有输出正确答案,后来才发现是因为对全局变量改变了才导致的。
就是下面这一段:
    /*num[0]=m%10;    num[1]=(m%100)/10;    num[2]=(m%1000)/100;    num[3]=m/1000;    numi[0]=a%10;    numi[1]=(a%100)/10;    numi[2]=(a%1000)/100;    numi[3]=a/1000;*/
换成了这一段:
i=-1;    while(m!=0)    {        num[++i]=m%10;        m/=10;    }    i=-1;    while(a[k].x!=0)    {        numi[++i]=a[k].x%10;        a[k].x/=10;    }
就把a[k].x的值改了,而a[k].x在这里是全局变量,所以没得到正确答案。



0 0
原创粉丝点击