临近省赛,Alan邀请emoji大佬玩起了猜数字游戏活跃一下大脑。游戏规则如下:
首先Alan写下几个数字让emoji大佬猜,当emoji大佬猜完之后,Alan会给他一个提示,这个提示包含两部分:全对的情况 和 只是数字对的情况。
- 全对:emoji大佬猜的数字和该数字所在的位置都是正确的;
- 只是数字对:emoji大佬猜的数字对了,但是位置不对。
现在Alan想请你计算一下,当emoji大佬猜完之后,应该给他的提示是多少。
输入格式:
输入分为两行,分别是Alan 和 emoji大佬写下的数字串。
0≤len(nums)≤106
输出格式:
输出提示的两个数,用逗号隔开。
输入样例:
2021
1022
输出样例:
2 , 2
样例说明
2 0 2 1
|| ||
1 0 2 2
上述样例可以看出,0,2 的数字和位置都是对的,而2,1的数字对了,但是位置不对,
所以提示应该输出 2 ,2
输入样例:
123456
653421
输出样例:
2 , 4
样例说明
1 2 3 4 5 6
|| ||
6 5 3 4 2 1
上述样例可以看出,3,4 的数字和位置都是对的,
而1,2,5,6的数字对了,但是位置不对,
所以提示应该输出 2 ,4代码如下:
import java.util.*;
public class Main {
static int allRight = 0;
static int numberRight = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str1 = input.next();
String str2 = input.next();
Map<Integer,Integer> map1=new HashMap<>();
Map<Integer,Integer> map2=new HashMap<>();
for (int i = 0; i < str1.length(); i++) {
int num1 = Integer.parseInt(str1.charAt(i)+"");
int num2 = Integer.parseInt(str2.charAt(i)+"");
if(num1 == num2)
allRight++;
if(!map1.containsKey(num1)){
map1.put(num1,1);
}else
map1.replace(num1,map1.get(num1),map1.get(num1)+1);
if(!map2.containsKey(num2)){
map2.put(num2,1);
}else
map2.replace(num2,map2.get(num2),map2.get(num2)+1);
}
Map temp1;
Map temp2;
if(map1.size() < map2.size()){
temp1 = map1;
temp2 = map2;
}
else {
temp1 = map2;
temp2 = map1;
}
Set<Integer> set1 = temp1.keySet();
Iterator<Integer> it1 = set1.iterator();
while (it1.hasNext()){
int num1 = it1.next();
Set<Integer> set2 = temp2.keySet();
Iterator<Integer> it2 = set2.iterator();
while (it2.hasNext()){
int num2 = it2.next();
if (num1 == num2){
numberRight = numberRight + Math.min(map1.get(num1),map2.get(num2));
break;
}
}
}
System.out.println(allRight+" , "+(numberRight - allRight));
}
}
版权声明:本文为m0_67463447原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。