猜數字
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2553 Accepted Submission(s): 1484
比如計算機隨機產生的數字爲1122。如果玩家猜1234,因爲1,2這兩個數字同時存在於這兩個數中,而且1在這兩個數中的位置是相同的,所以計算機會告訴玩家猜對了2個數字,其中一個在正確的位置。如果玩家猜1111,那麼計算機會告訴他猜對2個數字,有2個在正確的位置。
現在給你一段gameboy與計算機的對話過程,你的任務是根據這段對話確定這個四位數是什麼。
import java.util.Scanner;
public class Main {
static int[] a,b,c;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
if(n == 0)
break;
a = new int[n];
b = new int[n];
c = new int[n];
for(int i=0; i<n; i++){
a[i] = in.nextInt();
b[i] = in.nextInt();
c[i] = in.nextInt();
}
int num = 0;
int result = 0;
for(int i=1000; i<=9999; i++){
int j = 0;
for(; j<n; j++){
if(!guessBCount(i,a[j],b[j])){
break;
}
if(!guessCCount(i,a[j],c[j])){
break;
}
}
if(j >= n){
num++;
result = i;
}
if(num >= 2 )
break;
}
if(num == 1){
System.out.println(result);
}else{
System.out.println("Not sure");
}
}
}
private static boolean guessCCount(int a, int b, int k) {
int temp1[] = new int[4];
int temp2[] = new int[4];
int count = 0;
for(int m=0; m<4; m++){
temp1[m] = a%10;
a /= 10;
temp2[m] = b%10;
b /= 10;
if(temp1[m] == temp2[m]){
count++;
}
}
if(count == k)
return true;
return false;
}
private static boolean guessBCount(int a, int b, int k) {
int temp1[] = new int[4];
int temp2[] = new int[4];
int count = 0;
for(int m=0; m<4; m++){
temp1[m] = a%10;
a /= 10;
temp2[m] = b%10;
b /= 10;
}
int[] visit = new int[4];
for(int i=0; i<4; i++){
for(int j=0; j<4; j++){
if(visit[j] == 0 && temp1[i] == temp2[j]){
count++;
visit[j] = 1;
break;
}
}
}
if(count == k)
return true;
return false;
}
}