键盘
Case Time Limit:1000MS
Time Limit: 3000MS | Memory Limit: 65536K | |||
Total Submissions: 28 | Accepted: 17 |
Description
大家都知道,现在使用键盘的是下列字母:
qwertyuiop
asdfghjkl;
zxcvbnm,./
BSNY在联系盲打,但是有时候,他盲打会偏移一个,或者左偏或者右偏,如果左偏,比如BSNY想打f,实际按了d;反之,如果右偏,想打d,实际打了f。
为了方便,我们用L,R表示左偏和右偏。
给你BSNY打出来的字母,问BSNY原本想打的字母是什么?
Input
先输入L或R
然后一行字符
Output
输出BSNY原本想打的字符
Sample Input
R s;;upimrrfod;pbr
Sample Output
allyouneedislove
Hint
保证打的字符在上述键盘框内, 字符串长度小于10000
这是一道水题,就是模拟,但是读题要仔细啊,它给出的字符串是现在的,然后L,R代表的是他经过了什么变化而输出现在的字串的,然后叫你输出原来的字符串。
我的方法是分情况讨论,L,R,然后每次for一遍所有的键盘,然后再输出。
但是有更好的方法:(直接上代码)
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s = "qwertyuiopasdfghjkl;zxcvbnm,./";
char d;
cin >> d;
string p;
cin >> p;
for (int i = 0; i < p.size(); i++) {
int ch = s.find(p[i]);
if (d=='L') cout << s[ch+1];
else cout << s[ch-1];
}
cout<<endl;
return 0;
}
它的思想就是把所有的都存进去,然后再在里面判断是L还是R,然后输出+1操作还是-1操作。
<