OJ系列-UVA10082(WERTYU)java版

签到,今天是连续OJ系列的第二天!
今天的重点是:细心!!!

题目描述

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

样例输入:

O S, GOMR YPFSU/

样例输出:

I AM FINE TODAY.

首先还是细读题目,看给出的键盘键位的分布,可以知道在输入的时候是不会输入“ ` ”,“ A ”,“ Z ”这三个字符,也可以知道输不出“ = ”,“ \ ”,“ ’ ”, “ / ”,尽管这些和解此题没有太大关系,不过说不定换个题就关系了,所以读题的时候要充分挖掘信息。这题和UVA272差别不大,都是读字符串再替换,读字符串的做法和UVA272一样,都是IO加循环,替换也不难,先将键盘上相关的键位定义到一个字符数组,在定义字符数组的时候一定要根据图上的键盘来定义,完成字符数组过后,每读一个字符就将它和数组中的字符相比较,如果相等就替换成前一个元素,其中还有一个细节就是空格和换行是不在字符数组中,但输入的字符串中是可能有空格和换行的。接下来就是写代码了

代码实现

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Uva10082 {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String k="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
		char []c=k.toCharArray();
		char n=0;
		
		//char [] c={'`','1','2','3','4','5','6','7','8','9','0','-','=','Q','W','E','R','T','Y','U','I','O','P','[',']','\\','A','S','D','F','G','H','J','K','L',';','\'','Z','X','C','V','B','N','M',',','.','/'};
		BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));
		while((n= (char) cin.read())!=(char)-1){
			if(n==32){//空格符的ASCII码值
				System.out.print((n));
				continue;
			}
			if(n==10){//换行符的ASCII码值
				System.out.print(n);
				continue;
			}
			for(int i=1;i<c.length;i++){
				if(c[i]==n){
					System.out.print(c[i-1]);
					break;//找到就退出,不用在继续循环,减少时间
				}
				
			}
		}
		
	}

}

说明

和UVA272一样,复制来的字符串有换行的,会中断,可以将读取写成读文件检验代码的准确度,这是最好的方式,因为在比赛的时候,输入的数据就是从文件中读取,将输出的数据与答案文档比较,来判定能不能AC。这里我开始放了两个低级的错误,就是开头说的细心问题,一是忘了将’0’定义在字符数组中,二是在定义字符数组的时候,我将数字字符直接写成了,1,2,3,4,而不是‘1’,‘2’,‘3’,这两种写法是有巨大的差别的,后来我就干脆用字符串转字符数组了,之后一次就过,之前一次次的错误还是很煎熬的,所以还是细心细心细心!!!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值