Problem Description
猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段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与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
比如计算机随机产生的数字为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