您的位置:首页 > 其它

hdu 1172 猜数字

2015-02-07 22:07 381 查看
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


/*枚举法,把猜测的数字建立一个结构体,方便后续的比较,
枚举每一个四位数,和猜测的数字进行比较,求出共有的数字个数
和共有数字个数、位置都相等的数字个数,和题目中给出的这两个数值相比,
如果都相等,则说明符合条件。*/
#include <stdio.h>
#include <string.h>
typedef struct
{
char n[5];
int num, pos;
}no;
no node[103];
int judge(int i, int j)
{
int p, q, nr = 0, pr = 0, vis[4] = {0};
char num[5];
sprintf(num, "%d", i);//把i作为整数类型写入字符串num
for(p = 0 ; p < 4 ; p++)
{
for(q = 0 ; q < 4 ; q++)
{
if(!vis[q] && num[q] == node[j].n[p])
{
nr++;
vis[q] = 1;//也是防止重复的数出现。不过这里是为了防止外重循环里的数
break; //如果发现两个数中已经有共有的数了,直接break,防止重复的数出现,导致nr多加 (防止内重循环)
}
}
}
for(p = 0 ; p < 4 ; p++)
{
if(num[p] == node[j].n[p])
pr++;
}
if(nr == node[j].num && pr == node[j].pos)
return 1;
return 0;

}
int main()
{
int cou, ans, t, flag, i, j;
while(scanf("%d", &t), t!=0)
{
cou = 0;
for(i = 0 ; i < t ; i++)
scanf("%s %d %d", node[i].n, &node[i].num, &node[i].pos);
for(i = 1000 ; i < 10000 ; i++)//枚举每一个四位数
{
flag = 1;
for(j = 0 ; j < t ; j++)//依次和第j个猜的数进行匹配
{
if(!judge(i, j))
{
flag = 0;
break;
}
}
if(flag)//如果和每一个数匹配都符合条件,就把总符合条件数的个数+1
{
ans = i;
cou++;
}
}
if(cou == 1)
printf("%d\n", ans);
else
printf("Not sure\n");
}
return 0;
}


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: