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
Sample Output
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
Sample Output
猜数字游戏是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
相关文章推荐
- HDU 1172 猜数字
- hdu 1172 猜数字(暴力枚举)
- HDU 1172 猜数字 水题
- HDU 1172 猜数字(暴力)
- hdu 1172 猜数字(枚举)
- hdu 1172 猜数字
- HDU 1172 猜数字
- HDU 1172 猜数字 (傻逼暴力题)
- HDU 1172 猜数字
- HDU - 1172 猜数字
- hdu 1172 猜数字
- hdu 1172 猜数字
- HDU 1172 猜数字(枚举)
- hdu1172 猜数字(枚举)
- hdu 1172 猜数字
- HDU-1172 猜数字
- hdu 1172 猜数字
- HDU 1172 猜数字(暴力)
- hdu 1172 猜数字
- hdu 1172 猜数字(枚举)