总时间限制: 1000ms 内存限制: 1024kB 描述 拉丁字母表有26个字符,而电话只有数字输入板。为了便于输入字母,我们做了一个对应关系。 例如,要输入B,程序要输入22.为了输入相同键上的不同字母,用户在输入之间要停顿一下。 空格' '用来指代停顿。例如2 2代表AA,22代表B 输入 第一行代表测试案例的数目N 下面N行,每行是一个字符串 输出 对于每个测试案例,输出“Case #x: ",然后输出按键顺序。用 c 语言写
时间: 2024-04-07 08:28:19 浏览: 107
以下是基于C语言的解法:
```c
#include <stdio.h>
#include <string.h>
int main() {
int n, i, j, k;
char str[101];
char map[27] = {'2', '2', '2', '3', '3', '3', '4', '4', '4', '5', '5', '5', '6', '6', '6', '7', '7', '7', '7', '8', '8', '8', '9', '9', '9', '9'}; // 数字键盘对应的字母映射表
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%s", str);
printf("Case #%d: ", i);
for (j = 0; j < strlen(str); j++) {
if (str[j] == ' ') { // 空格直接输出
printf("0");
} else {
k = str[j] - 'a'; // 计算字母的索引
printf("%c", map[k]);
}
}
printf("\n");
}
return 0;
}
```
解释:
1. 首先读入测试案例的个数 `n`。
2. 用一个循环遍历每个测试案例。
3. 对于每个测试案例,先读入一个字符串 `str`。
4. 输出 `Case #x: `,其中 `x` 是当前测试案例的编号。
5. 遍历字符串 `str` 中的每个字符:
- 如果是空格,则输出 `0`。
- 如果是小写字母,则计算出它在映射表中的索引,并输出对应的数字。
6. 输出换行符。
7. 重复步骤 3-6 直到处理完所有测试案例。
注意:
1. 本题中,空格也算作一个字符并且需要输出。因此在遍历字符串时需要特别处理。
2. 由于题目中字母与数字的映射关系比较固定,因此我们可以使用一个数组来存储映射表。
阅读全文