UVa10082 WERTYU 题解

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[]={"`1234567890-=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;
} 

以上就是《UVa10082 WERTYU》的详细题解,如果您认为我的文章对您起到了帮助作用,恳请点赞关注支持一下,您的鼓励就是我前进的最大动力。
我是Horseman:一名正在成长的蒟蒻OIer,UVa题解系列持续更新中,感谢大家的鼓励支持。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值