【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-CSDN博客
JS、python、C、C++、Java代码:
【华为OD】D卷真题 200分: 计算误码率 JavaScript代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题 200分: 计算误码率 python代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题 200分: 计算误码率 C语言代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题 200分: 计算误码率 C/C++代码实现[思路+代码]-CSDN博客
【华为OD】D卷真题 200分: 计算误码率 Java代码实现[思路+代码]-CSDN博客
题目描述:
误码率是最常用的数据通信传输质量指标。它可以理解为“在多少位数据中出现一位差错”。
移动通信网络中的误码率主要是指比特误码率,其计算公式如下:比特误码率=错误比特数/传输总比特数,
为了简单,我们使用字符串来标识通信的信息,一个字符错误了,就认为出现了一个误码
输入一个标准的字符串,和一个传输后的字符串,计算误码率
字符串会被压缩,
例如:“2A3B4D5X1Z” 表示 “AABBBDDDDXXXXXZ
用例会保证两个输入字符串解压后长度一致,解压前的长度不一定一致。
每个生成后的字符串长度<100000000。
输入描述
两行,分别为两种字符串的压缩形式。 每行字符串(压缩后的)长度<100000
输出描述
一行,错误的字符数量 / 展开后的总长度
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3A3B
2A4B
输出
1/6
示例2
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
5Y5Z
5Y5Z
输出
0/10
示例3
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4Y5Z
9Y
输出
5/9
备注
注意:展开后的字符串不含数字。
34334
+---+
3 | | ++ + +---|
| | | 3 + 6 + | + | +
| + | | + + + | + | +
| + | +---+ + + +++++ + + + | +
| + | + | + +----+ | | + + + | +
| + 3 | + | + + + 2 | | 2 + + + | +
| + | + | + + + | | + + + | +
| +---+ + | | | + ----+ | +---+ | | + | +
| | + | | | + | | | | | | + | +
| 1 | + | 8 | | + 1 | | | 1 | | 1 | | + | +
| | + | | | + | | | | | | | + | +
| +---+ + +---+ | ++---+ ++ +---+ +---+ | + | +
| | + | | | ++ | | |+ | +
|0 | + | 0 | 0 | ++ | 0 | |+ | +
| | + | | | ++ | | |+ | +
+---+ + +-------+ +---+| +|+ | +
+ + | +
0 1 2 3 4 5 6 7 8 9 10 11 12 + v: w u m u 1 0 2 4
题目解析:
按逻辑处理即可,先把字符按数字次数展开得到新的字符串,然后再进行比较,得到结果
代码实现:
import java.util.*;
public class Main {
public static String getRes(String s) {
int res = 0;
StringBuilder ret = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
res = res * 10 + s.charAt(i) - '0';
} else {
for (int j = 0; j < res; j++) {
ret.append(s.charAt(i));
}
res = 0;
}
}
return ret.toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
str1 = getRes(str1);
str2 = getRes(str2);
int count = 0;
for (int i = 0, j = 0; i < str1.length(); i++, j++) {
if (str1.charAt(i) != str2.charAt(j)) {
count++;
}
}
System.out.println(count + "/" + str1.length());
}
}