第三题:《卡片》
题目大意
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
解题思路
首先建立一个map映射,将0–9 每个卡片各有2021个存入map:
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
String string = "0123456789";
for(char ch : string.toCharArray()) {
map.put(ch, 2021);
}
然后通过count来计数,如果可以拼成这个数就+1,否则不变。
定义一个account,来生成要拼成的那个数。
定义一个 while 循环来求解:
int count = 0;//计数器
int account = 1;//拼成的数
OUT:
while (f(map)) {
String s = new String(account + "");
account++;
for (char c : s.toCharArray()) {
if (map.containsKey(c)) {
Integer value = map.get(c);
value--;
if (value < 0) {
break OUT;
}
map.put(c, value);
}
}
count++;
}
System.out.println(count);
}
注意while循环的结束条件:
当map集合中每个key 对应的 value 全部为负数时,代表已经没有卡片了,此时退出循环。
private static boolean f(HashMap<Character, Integer> map) {
// TODO Auto-generated method stub
int a = 0;
for(char key : map.keySet()) {
Integer value = map.get(key);
if (value <= 0) {
a++;
}
}
if (a == 10) {
return false;
}else {
return true;
}
}
答案3181
完整代码:
import java.util.*;
public class Mian {
public static void main(String[] args) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
String string = "0123456789";
for(char ch : string.toCharArray()) {
map.put(ch, 2021);
}
int count = 0;//计数器
int account = 1;//拼成的数
OUT:
while (f(map)) {
String s = new String(account + "");
account++;
for (char c : s.toCharArray()) {
if (map.containsKey(c)) {
Integer value = map.get(c);
value--;
if (value < 0) {
break OUT;
}
map.put(c, value);
}
}
count++;
}
System.out.println(count);
}
private static boolean f(HashMap<Character, Integer> map) {
// TODO Auto-generated method stub
int a = 0;
for(char key : map.keySet()) {
Integer value = map.get(key);
if (value <= 0) {
a++;
}
}
if (a == 10) {
return false;
}else {
return true;
}
}
}