题解 P6401 【[COCI2014-2015#2] MOBITEL】

Zirnc

2020-04-18 12:37:20

Solution

> [ChungZH's Blog](https://chungzh.cn) · [ChungZH's Portfolio](https://chungzh.cc) 这道题其实挺简单的,只不过有点麻烦,要打几个表。剩下的模拟就行了。 解释一下代码: - `t1` 找到某一个字母对应的数字键。比如,字母 `a` 在 `2` 键上面,所以 t1[0] 就是 `2`。(下标就是 `字母-'a'` 得出的数字) - `times` 顾名思义,就是按一个字母所需要的字数。比如字母 `c`,需要按 `2` 键三次,所以 `times[2]` 就是 `3`。(下标规则同上) - `inp` 即输入中的第一行,按下 `t` 键的作用相当于原来的 `inp[t]` 键 还要记得如果有相邻两个字母都需要按同一个键,输出 `#`。 ```cpp #include <iostream> using namespace std; const char t1[26] = {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}; const int times[26] = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4}; int inp[10]; int main() { int t; for (int i = 1; i <= 9; i++) { cin >> t; inp[t] = i; } string s; cin >> s; for (int i = 0; i < s.length(); i++) { if (t1[s[i] - 'a'] == t1[s[i - 1] - 'a']) cout << '#'; for (int j = 0; j < times[s[i] - 'a']; j++) { cout << inp[t1[s[i] - 'a']]; } } cout << endl; return 0; } ```