2025年UVa10082 WERTYU 题解

UVa10082 WERTYU 题解UVa10082 WERTYU 题目链接 UVa10082 题目描述 输入格式 输出格式 题目翻译 把手放在键盘上 稍不注意就会往右错一位 这样 输入 Q 会变成输入 W 输入 J 会变成输入 K 等 键盘如图所示 输入一个错位后敲出来的字符串 所有字母均大写

大家好,我是讯享网,很高兴认识大家。

UVa10082 WERTYU

题目链接:UVa10082

题目描述

alt
讯享网

输入格式

alt

输出格式

alt

题目翻译

把手放在键盘上,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。键盘如图所示。 输入一个错位后敲出来的字符串(所有字母均大写),输出打字员本来想打出的矩阵输入保证合法,即一定是错位之后的字符串。例如输入中不会出现大写字母A。

多行输入 每行包括数字,空格,大写字母(除了Q,A,Z)或者是标点符号(除了“’”(L右面第2个)),标有单词的按键,如Tab,BackSp,Control等等不会出现。

你需要用每个字母或者符号左面的(在如图给出的QWERTY类型的键盘)那个按键内容替换他,输入的空格不作处理,依然输出空格。

题目分析

本题关键在于如何进行输入输出变换。一种易想到的方法是使用if或switch语句进行特判,如if(c=‘W’)putchar(‘Q’),但这样处理的情况过多,步骤过于繁琐,故此方法不在考虑范围内。
一种既简单又高效的方法是打表,即使用常量数组,用数组中的每一个每一个值代表键盘上的一个键位,则其下标减一对应的值即为原想要打出的字符,打表也是一种在算法竞赛中常用的节约时间手段。
注意:C++中反斜线\与单引号’需要转义,即写成\\与\’。

Code

#include<cstdio> using namespace std; int c,i; char s[]={ 
   "`-=QWERTYUIOP[]\\ASDFGHJKL;\'ZXCVBNM,./'"}; //定义常量数组时无需指明大小,编译器会计算 int main() { 
    while((c=getchar())!=EOF) { 
    for(i=1;s[i] && s[i]!=c;i++);//找错位之后的字符在常量表中的位置  if(s[i]) putchar(s[i-1]);//如果找到,则输出它的前一个字符  else putchar(c); } return 0; } 

讯享网
小讯
上一篇 2025-04-08 12:53
下一篇 2025-03-10 23:12

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/19086.html