MEGChai MEGChai
  • 文章
    • 随笔
    • 笔记
    • 教程
  • 关于
首页 › 数据结构与算法 › 在线评测 › UVaOJ 10082 - WERTYU
AOAPC II

UVaOJ 10082 - WERTYU

Chai
2021-11-24 0:00:00在线评测阅读 251

问题描述

p10082

原题链接:UVaOJ 10082 - WERTYU

相关说明:本题为《算法竞赛入门经典(第2版)》例题 3-2

解法一:模拟

模拟读入,可一边读一边处理(逐字符或逐行地),需要找到当前字符 ch 在键盘 KB 中所在的位置(找不到则原样输出),根据题目描述的偏移量为 1 的性质进行替换,然后直接输出即可。由于题目保证了输入没有 Q, A, Z 字符,所以可以把三行键盘拼在一起作为一整个字符串常量,方便查询。注意这里用到的 find 是 STL 中很常见的接口,也可以自己实现它,比如用 for 循环扫描字符串来尝试找到 pos 位置。

容易忽视的地方:没有处理 \\ 的转义(下面的代码块渲染成 HTML 被转义成 \ 的话,请双击查看源码)。

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  const string KB = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
  char ch;
  while ((ch = getchar()) != EOF) {
    int pos = KB.find(ch);
    if (pos != string::npos)
      cout << KB[pos - 1];
    else
      cout << ch;
  }
  return 0;
}
Python
1
2
3
4
5
6
7
8
import sys
 
KB = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"
 
for line in sys.stdin:
    for ch in line:
        idx = KB.find(ch)
        print(KB[idx - 1] if idx >= 0 else ch, end="")
AOAPC II UVaOJ 字符串
赞赏 赞(0)
订阅
提醒
guest
guest
0 评论
内嵌评论
查看所有评论
  • 0
  • 0
Copyright © 2020-2023 MEGChai.
  • 文章
    • 随笔
    • 笔记
    • 教程
  • 关于
# 生活 # # 心理 # # 编程 # # 音乐 # # 写作 #
Chai
95
文章
4
评论
58
喜欢
wpDiscuz