例题:
这里是引用
题目:请设计一个计票器程序,通过输入有效候选人列表和投票结果,计算出1.每个有效候选人的票数;2.无效票数;3.获得票数最多的人。
注意:如果候选人的票数相同,则通过候选人列表中候选人的顺序决定谁胜出。如果票数中的无效票多于最高票候选人的票数或者票数为空,则无人获胜。例1
Input:
Valid Candidates Name [“A”,“B”,“C”]
Vote Casted[“A”,“F”,“A”,“B”,“A”,“B”,“A”,“C”,“E”]
Output:
A=4 B=2 C=1 incalidVotes=2 Winner = A
例2:
Input:
Valid Candidates Name[“A”,“C”,“B”]
Vote Casted[“A”,“F”,“B”,“B”,“B”,“C”,“C”,“C”,“E”]
Output:
A=1 B=3 C=3 invalidVotes=2 Winner = C
(B、C票数相同,但是候选人列表中C的位置靠前,所以C获胜
例3:
Input:
Valid Candidates Name[“A”,“C”,“B”]
Vote Casted[“R”,“F”,“G”,“B”,“B”,“K”,“L”,“C”,“E”]
Output:
A=0 C=1 B=2 invalidVotes=6 Winner = N/A
例4:
Input:
Valid Candidates Name[“A”,“C”,“B”]
Vote Casted[]
Output:
A=0 C=0 B=0 invalidVotes=0 Winner = N/A
代码
public static String countVotes(List<String> validCandidates, List<String> voteCasted){
int invalid = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < voteCasted.size(); i++) {
int toNum = voteCasted.get(i).toCharArray()[0] - 'A' + 1;
if (toNum > (validCandidates.size() + 1)){
invalid++;
continue;
}else {
map.put(toNum, map.getOrDefault(toNum, 0) + 1);
}
}
StringBuilder sb = new StringBuilder();
int max = 0 ;
String winner = new String();
//找到最大的
for (int i = 0; i < validCandidates.size(); i++) {
if (map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1)!= null && map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1) > max){
max = map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1);
winner = validCandidates.get(i);
}
sb.append(validCandidates.get(i));
sb.append("=");
if (map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1) != null){
sb.append(map.get(validCandidates.get(i).toCharArray()[0] - 'A' + 1));
}else {
sb.append(0);
}
sb.append(" ");
}
Collections.sort(validCandidates);
sb.append("invalidVotes=");
sb.append(String.valueOf(invalid));
sb.append(" Winner=");
if (max > 0 && max > invalid){
sb.append(winner);
}else {
sb.append("N/A");
}
return sb.toString();
}
其中的x.toCharArray()[0] - 'A' + 1
即是把字母x对应的数字
把数字转为字母的的方法如下
int num = 5;
String letter = String.valueOf(((char)(((num - 1) % 26) + (int)'A')));
System.out.println(letter);