首页 > 代码库 > HDU 1172 猜数字(暴力)
HDU 1172 猜数字(暴力)
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
Author
lwg
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #define L(x) (x<<1) #define R(x) (x<<1|1) #define MID(x,y) ((x+y)>>1) using namespace std; #define N 20005 struct stud{ int v,x,y; }f[N]; int vis[11]; void fddd(int sum) { for(int i=0;i<11;i++) vis[i]=0; vis[sum%10]++; vis[sum/10%10]++; vis[sum/100%10]++; vis[sum/1000]++; } int n; int fdd(int sum) { int i,j; for(i=0;i<n;i++) { int x,y; x=y=0; fddd(sum); int temp=f[i].v; if(vis[temp%10]) {x++;vis[temp%10]--;} if(vis[temp/10%10]){x++;vis[temp/10%10]--;} if(vis[temp/100%10]) {x++;vis[temp/100%10]--;} if(vis[temp/1000]) {x++;vis[temp/1000]--;} if(sum%10==temp%10) y++; if(sum/10%10==temp/10%10) y++; if(sum/100%10==temp/100%10) y++; if(sum/1000==temp/1000) y++; if(x!=f[i].x||y!=f[i].y) { return 0; } } return 1; } int main() { int i,j,k,s; while(scanf("%d",&n),n) { for(i=0;i<n;i++) scanf("%d%d%d",&f[i].v,&f[i].x,&f[i].y); int ans=0; int num=0; for(i=1;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++) for(s=0;s<10;s++) { if(fdd(i*1000+j*100+k*10+s)) { ans=i*1000+j*100+k*10+s; num++; } if(num>1) goto ende; } ende: if(num==1) printf("%d\n",ans); else printf("Not sure\n"); } return 0; }
HDU 1172 猜数字(暴力)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。