猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
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
3585 Not sure
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
int num[6];
}s[110];
int n;
int vis[5];
int temp_num[5];
int check(int a,int b,int c,int d){
temp_num[1]=a,temp_num[2]=b,temp_num[3]=c,temp_num[4]=d;
int i;
for(i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
int right_num=0,right_pos=0;
for(int j=1;j<=4;j++){
if(s[i].num[j]==temp_num[j])
right_pos++;
for(int k=1;k<=4;k++){
if(!vis[k]&&s[i].num[j]==temp_num[k]){
vis[k]=1;
right_num++;
break;
}
}
}
if(right_num==s[i].num[5]&&right_pos==s[i].num[6])
continue;
else
break;
}
if(i==n+1)
return 1;
return 0;
}
int main()
{
while(~scanf("%d",&n)&&n){
for(int i=1;i<=n;i++){
for(int j=1;j<=6;j++){
scanf(" %1d",&s[i].num[j]);
}
}
int ans=0,ans_a,ans_b,ans_c,ans_d;
int i,j,k,l;
for(i=0;i<=9;i++){
for(j=0;j<=9;j++){
for(k=0;k<=9;k++){
for(l=0;l<=9;l++){
if(check(i,j,k,l)){
ans++;
ans_a=i,ans_b=j,ans_c=k,ans_d=l;
}
}
}
}
}
if(ans==1)
printf("%d%d%d%d\n",ans_a,ans_b,ans_c,ans_d);
else
printf("Not sure\n");
}
return 0;
}