【华为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
题目解析:
按逻辑处理即可,先把字符按数字次数展开得到新的字符串,然后再进行比较,得到结果
代码实现:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <malloc.h>
char *calc(char *s) {
char *res = (char *) malloc(sizeof(char) * 100000000);
char *p = res;
memset(res, 0, sizeof(char) * 100000000);
int num = 0;
for (; *s; ++s) {
if (isdigit(*s)) {
num = num * 10 + *s - '0';
continue;
}
for (int j = 0; j < num; ++j) {
*res = *s, ++res;
}
num = 0;
}
return p;
}
int main() {
char *s1 = (char *) malloc(sizeof(char) * 100000000);
char *s2 = (char *) malloc(sizeof(char) * 100000000);
gets(s1);
gets(s2);
char *res1 = calc(s1);
char *res2 = calc(s2);
int all = strlen(res1);
int cnt = 0;
for (; *res1; ++res1, ++res2) {
if (*res1 != *res2) {
++cnt;
}
}
printf("%d/%d\n", cnt, all);
return 0;
}