//例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
//但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
//现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1
//拼到多少?
//自己方法(垃圾)从1开始穷举,数字转化为string,拆开后转回int,对应数字卡片数量++,达到2022后输出,答案就是输出数字的前一个数字
public class test3 {
public static void main(String[] args) {
int[] i=new int[10];
for (int j = 1; j < 1000000; j++) {
String s=""+j;
if(s.length()==1){
int x= Integer.parseInt(String.valueOf(s.charAt(0)));
i[x]++;
if(run(i)==true){
System.out.println(s);
}
}else if (s.length()==2){
int x1= Integer.parseInt(String.valueOf(s.charAt(0)));
int x2= Integer.parseInt(String.valueOf(s.charAt(1)));
i[x1]++;i[x2]++;
if(run(i)==true){
System.out.println(s);
}
}else if (s.length()==3){
int x1= Integer.parseInt(String.valueOf(s.charAt(0)));
int x2= Integer.parseInt(String.valueOf(s.charAt(1)));
int x3= Integer.parseInt(String.valueOf(s.charAt(2)));
i[x1]++;i[x2]++;i[x3]++;
if(run(i)==true){
System.out.println(s);
}
}else if (s.length()==4){
int x1= Integer.parseInt(String.valueOf(s.charAt(0)));
int x2= Integer.parseInt(String.valueOf(s.charAt(1)));
int x3= Integer.parseInt(String.valueOf(s.charAt(2)));
int x4= Integer.parseInt(String.valueOf(s.charAt(3)));
i[x1]++;i[x2]++;i[x3]++;i[x4]++;
if(run(i)==true){
System.out.println(s);
}
}else if (s.length()==5){
int x1= Integer.parseInt(String.valueOf(s.charAt(0)));
int x2= Integer.parseInt(String.valueOf(s.charAt(1)));
int x3= Integer.parseInt(String.valueOf(s.charAt(2)));
int x4= Integer.parseInt(String.valueOf(s.charAt(3)));
int x5= Integer.parseInt(String.valueOf(s.charAt(4)));
i[x1]++;i[x2]++;i[x3]++;i[x4]++;i[x5]++;
if(run(i)==true){
System.out.println(s);
}
}else if (s.length()==6){
int x1= Integer.parseInt(String.valueOf(s.charAt(0)));
int x2= Integer.parseInt(String.valueOf(s.charAt(1)));
int x3= Integer.parseInt(String.valueOf(s.charAt(2)));
int x4= Integer.parseInt(String.valueOf(s.charAt(3)));
int x5= Integer.parseInt(String.valueOf(s.charAt(4)));
int x6= Integer.parseInt(String.valueOf(s.charAt(5)));
i[x1]++;i[x2]++;i[x3]++;i[x4]++;i[x5]++;i[x6]++;
if(run(i)==true){
System.out.println(s);
}
}else if (s.length()==7){
int x1= Integer.parseInt(String.valueOf(s.charAt(0)));
int x2= Integer.parseInt(String.valueOf(s.charAt(1)));
int x3= Integer.parseInt(String.valueOf(s.charAt(2)));
int x4= Integer.parseInt(String.valueOf(s.charAt(3)));
int x5= Integer.parseInt(String.valueOf(s.charAt(4)));
int x6= Integer.parseInt(String.valueOf(s.charAt(5)));
int x7= Integer.parseInt(String.valueOf(s.charAt(6)));
i[x1]++;i[x2]++;i[x3]++;
i[x4]++;i[x5]++;i[x6]++;i[x7]++;
if(run(i)==true){
System.out.println(s);
}
}
}
}
public static boolean run(int[] i){
for (int j = 0; j <10 ; j++) {
if(i[j]==2022){
System.out.println("结束");
return true;
}
}
return false;
}
}
更好的方法 :
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] hash = new int[10];
Arrays.fill(hash, 2021);//十个位置填满2021
long num = 0;
boolean flag;//开关
do {
num++;
flag = true;
//转换为char,用增强for遍历
char[] str = String.valueOf(num).toCharArray();
for (char bit : str) {
if (hash[bit - '0'] > 0) {
hash[bit - '0']--;
} else {
flag = false;
break;
}
}
} while (flag);
System.out.println(num - 1); // 3181
}
}