猜數字

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 852    Accepted Submission(s): 481


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>
bool check1(int num1,int num2,int t)
{
int a[4],b[4];
int c[4];
int i,j;
for(i=0;i<4;i++)
{
a[i]
=num1%10;
num1
/=10;
b[i]
=num2%10;
num2
/=10;
c[i]
=0;
}
int m=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(c[j]==0&&a[i]==b[j])
{
m
++;
c[j]
=1;
break;
}
if(m==t) return true;
else return false;
}
bool check2(int num1,int num2,int t)
{
int a[4],b[4];
int i,j;
int m=0;
for(i=0;i<4;i++)
{
a[i]
=num1%10;
num1
/=10;
b[i]
=num2%10;
num2
/=10;
if(a[i]==b[i]) m++;
}
if(m==t) return true;
else return false;
}
int main()
{
int a[101],b[101],c[101];
int cnt,res;
int n,i,j;
while(scanf("%d",&n),n)
{
for(i=0;i<n;i++)
scanf(
"%d%d%d",&a[i],&b[i],&c[i]);
cnt
=0;
for(i=1000;i<=9999;i++)
{
for(j=0;j<n;j++)
{
if(check1(i,a[j],b[j])==false)break;
if(check2(i,a[j],c[j])==false)break;
}
if(j>=n)
{
cnt
++;
res
=i;
}
if(cnt>=2)break;
}
if(cnt==0||cnt>=2) printf("Not sure\n");
else printf("%d\n",res);
}
return 0;
}


文章來源:http://www.cnblogs.com/kuangbin/archive/2011/08/12/2136005.html