猜数字
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
Author
lwg
#include <stdio.h>
#include<string.h>
#define M 100;
int main(){
int arr[100][4] = { {0}};
int a[100] ={ 0 };
int b[100] ={ 0 } ;
int N;
int result = 0;
int t;
int t1 = 0, t2 = 0;
int k;
int i,j,p;
int flag = 0;
int tmp[4] = {0};
int ass[4] = {0};
while(scanf("%d",&N)!= EOF && N != 0){
for( i = 0; i < N ; i ++){
scanf("%d%d%d",&arr[i][0],&a[i],&b[i]);
for(j = 3; j > 0 ; j --){
arr[i][j] = arr[i][0] % 10;
arr[i][0] = arr[i][0] / 10;
}
}
flag = 0;
for( i = 1000; i <= 9999; i ++){
//将i转换成数组中的四个数
t = i;
for( j = 3; j >= 0 ; j --){
tmp[j] = t % 10;
t = t /10;
}
//对照待测数组
for( k = 0; k < N ; k ++){
memset(ass,0,4*sizeof(int));
//首先位置对照
t1 = 0;
t2 = 0;
for( j = 0 ; j < 4; j ++){
if(arr[k][j] == tmp[j] ){
t2 += 1;
}
}
if(t2 != b[k]){
break;
}
else{
//数字对照
for( j = 0; j < 4; j ++){
for( p = 0; p < 4 ; p ++){
if(arr[k][j] == tmp[p] && ass[p] == 0){
t1 += 1;
ass[p] = 1;
break;
}
}
}
if(t1 != a[k]){
break;
}
}
}
if(k >= N ){
//printf("%d\n",i);
result = i;
flag += 1;
}
if(flag > 1){
break;
}
}
if(flag <= 1){
printf("%d\n",result);
}
if(flag > 1){
printf("Not sure\n");
}
//
}
}