题目描述
猜数字游戏是小明最喜欢的游戏之一。游戏的规则是这样的:电脑随机产生一个四位数,然后小明猜这个四位数是什么。每猜一个数,电脑都会告诉小明猜对几个数字,其中有几个数字在正确的位置上。
比如电脑随机产生的数字为 1122。如果小明猜 1234,因为 1、2 这两个数字同时存在于这两个数中,而且 1 在这两个数中的位置是相同的,所以电脑会告诉小明猜对了 2 个数字,其中一个在正确的位置。如果小明猜 1111,那么电脑会告诉他猜对 2 个数字,有 2 个在正确的位置。
现在给你一段小明与电脑的对话过程,你的任务是根据这段对话确定这个四位数是什么。输入输出格式
输入格式
第一行包含一个整数 n,表示这段对话中问答的次数。
接下来输入 n 行,每行包含三个整数 a,b,c,小明猜这个四位数为 a,然后电脑回答猜对了 b 个数字,其中 c 个在正确的位置上。
整数之间以空格间隔。输出格式
针对输入,如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出No
。输入输出样例1
输入
6
481521
571610
784210
490100
858533
855532输出
3585输入输出样例2
输入
2
481500
2999330输出
No说明/提示
1≤n≤102。
思想
- 输入的为字符串,再把字符串转为数字,然后暴力枚举,把1000到9999都试一遍,判断循环到的数字是否与小明输入的数字一样相同的下标数量一致,包含的字符的数量相同。
- 如果相同返回true,接着判断下一组输入,如果输入的所有天剑都满足,则输出这个数。
- 如果相同返回false,进入下一组循环,如果所有数都不满足,则输出no。
代码
import java.util.*;
public class Main {
//用于删除String中的指定下标
public static String delIndex(String str, int i) {
//如果删除的是下标0
if (i == 0) {
str = str.substring(1);
} else if (i == str.length() - 1) { //如果删除的是最后一个下标0
str = str.substring(0, str.length() - 1);
} else { //如果删除的是中间的下标
str = str.substring(0, i) + str.substring(i + 1);
}
return str;
}
public static boolean judge(String num, String str) {
int rNum = Integer.parseInt(str.substring(4, 5));
int rIndex = Integer.parseInt(str.substring(5, 6));
str = str.substring(0, 4);
//a为对应下标相同总数,b为str包含num的个数
int a = 0, b = 0;
for (int i = 0; i < str.length(); i++) {
if (num.charAt(i) == str.charAt(i)) {
num = delIndex(num, i);
str = delIndex(str, i);
a++;
b++;
i--;
}
}
for (int i = 0; i < str.length(); i++) {
for (int j = 0; j < num.length(); j++) {
if (str.charAt(i) == num.charAt(j)) {
num = delIndex(num, j);
str = delIndex(str, i);
b++;
break;
}
}
}
//判断算到的是否与电脑给的一样
return a == rIndex && b == rNum;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<String> list = new ArrayList<>();
System.out.print("请输入行数:");
int n = scanner.nextInt();
for (int i = 0; i < n; i++) {
String str = scanner.next();
if (str.length()!=6){
System.out.println("no");
return;
}
list.add(str);
}
int j;
for (int i = 1000; i < 10000; i++) {
for (j = 0; j < n; j++) {
if (!judge("" + i, list.get(j)))
break;
}
if (j == n) {
System.out.println(i);
return;
}
}
System.out.println("no");
}
}