题目
小U正在检查某同学的选择题答案。试卷共有 n 道题目,每道题目只有两个选项 A 和 B。当前小U手上有两组答案:
s:该同学的原始答案。t:标准答案。
小U想知道,如果将该同学的所有答案都反选(即:如果某题的答案是 A 则改成 B,如果是 B 则改成 A),那么在反选之后,正确的答案数量是否会增加?具体结果有三种可能:
- 如果反选后的正确答案数 增加,输出 "yes"。
- 如果反选后的正确答案数 不变,输出 "draw"。
- 如果反选后的正确答案数 减少,输出 "no"。
问题理解
我们需要判断在将某同学的所有选择题答案反选后,正确的答案数量是否会增加、减少或保持不变。具体来说,我们需要:
- 统计原始答案中正确的数量。
- 统计反选后的答案中正确的数量。
- 比较这两个数量,并返回相应的结果。
代码思路
-
统计原始答案的正确数量:
- 你首先将标准答案
t转换为字符数组ans。 - 然后将原始答案
s转换为字符数组old。 - 通过遍历
ans和old,统计原始答案中正确的数量oldcount。
- 你首先将标准答案
-
反转答案:
- 你创建了一个新的字符数组
newa,用于存储反转后的答案。 - 通过遍历
old,将每个字符反转('A' 变为 'B','B' 变为 'A')。
- 你创建了一个新的字符数组
-
统计反转后的正确答案数量:
- 再次遍历
ans和newa,统计反转后的答案中正确的数量newcount。
- 再次遍历
-
比较并返回结果:
- 通过比较
newcount和oldcount,返回相应的字符串结果。
- 通过比较
算法步骤
-
输入处理:
- 读取输入参数
n(题目数量)、s(原始答案)和t(标准答案)。
- 读取输入参数
-
统计原始答案的正确数量:
- 将
s和t转换为字符数组。 - 遍历这两个数组,统计原始答案中正确的数量
oldcount。
- 将
-
统计反选后的答案的正确数量:
- 在同一个遍历过程中,统计反选后的答案中正确的数量
newcount。 - 反选逻辑:如果原始答案是 'A',则反选后是 'B';如果原始答案是 'B',则反选后是 'A'。
- 在同一个遍历过程中,统计反选后的答案中正确的数量
-
比较并返回结果:
-
比较
newcount和oldcount:- 如果
newcount大于oldcount,返回 "yes"。 - 如果
newcount等于oldcount,返回 "draw"。 - 如果
newcount小于oldcount,返回 "no"。
- 如果
-
代码
public class Main {
public static String solution(int n, String s, String t) {
char[] ans = t.toCharArray();
//先统计一遍原来的正确答案
char[] old = s.toCharArray();
int oldcount = 0;
for(int i=0;i<ans.length;i++){
if(ans[i]==old[i]){
oldcount++;
}
}
//反转答案
int newcount = 0;
char []newa= new char[old.length];
for(int i = 0; i < old.length; i++){
if(old[i]=='A'){
newa[i]='B';
}else if (old[i]=='B'){
newa[i]='A';
}
}
//再统计一遍反转的正确答案
for(int i=0;i<ans.length;i++){
if(ans[i] == newa[i]){
newcount++;
}
}
if(newcount>oldcount){
return "yes";
}else if (newcount == oldcount){
return "draw";
}else{
return "no";
}
}
public static void main(String[] args) {
System.out.println(solution(2, "AB", "AA").equals("draw"));
System.out.println(solution(3, "BAA", "ABB").equals("yes"));
System.out.println(solution(4, "ABAB", "BABA").equals("yes"));
}
}
关键步骤解释
-
一次遍历完成统计:
- 在同一个循环中,同时统计原始答案的正确数量
oldcount和反转答案的正确数量newcount。
- 在同一个循环中,同时统计原始答案的正确数量
-
简化反转逻辑:
- 使用
old[i] == 'A' ? 'B' : 'A'来实现反转逻辑,避免了创建新的数组。
- 使用