HDOJ +1172猜数字

猜数字

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1391    Accepted Submission(s): 798

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
6 4815 2 1 5716 1 0 7842 1 0 4901 0 0 8585 3 3 8555 3 2 2 4815 0 0 2999 3 3 0
 
Sample Output
3585 Not sure
 
Author
lwg
代码:
#include<stdio.h>
typedef struct res{
    int a;
    int b;
}Res;
Res judge(int an,int gu){
    int i;
    int ans[4];
    int guess[4];
    Res r;
    r.a = 0;
    r.b = 0;
    int n[10] = {0};
    for(i = 3;i >= 0;i--){
        ans[i] = an % 10;
        an = an / 10;
        guess[i] = gu % 10;
        gu = gu/10;
    }
    for(i = 0;i  <4;i++){
        n[ans[i]]++;
        if(ans[i] == guess[i])
            r.b++;
    }
    for(i = 0;i < 4;i++){
        if(n[guess[i]] > 0){
            n[guess[i]]--;
            r.a++;
        }
    }
    return r;
}
int main(){
    int N;
    int i,m;
    int n;
    int    f;
    Res re;
    int key;
    int text[101][3];
    freopen("in.txt","r",stdin);
    while(scanf("%d",&N) && N != 0){
        for(i = 0;i < N;i++){
            scanf("%d%d%d",&text[i][0],&text[i][1],&text[i][2]);
        }
        f=0;
        for(i = 1000;i < 10000;i++){
            n = 0;
            for(m = 0 ; m < N;m++){
                re=judge(i,text[m][0]);
                if(re.a == text[m][1] && re.b == text[m][2])
                    n++;
                else
                    break;
                
            }
            if(n==N){
                key=i;
                f++;
            }
            if(f>1)
                break;
        }
        if(f==1)
            printf("%d\n",key);
        else
            printf("Not sure\n");
    }
    return 0;
}

 

posted @ 2012-09-21 20:24  kahreman  阅读(830)  评论(0编辑  收藏  举报