Problem Description
we define f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, ... f(Z) = 26, f(z) = -26;
Give you a letter x and a number y , you should output the result of y+f(x).
Give you a letter x and a number y , you should output the result of y+f(x).
Input
On the first line, contains a number T.then T lines follow, each line is a case.each case contains a letter and a number.
Output
for each case, you should the result of y+f(x) on a line.
Sample Input
6 R 1 P 2 G 3 r 1 p 2 g 3
Sample Output
19 18 10 -17 -14 -4
这道题做了两次,第一次是在刚学Java没多久,第二次是现在写的,从其中也是能感受到一点进步吧。
第一版本:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();
int[] aa=new int[52];
char[] ch=new char[52];
int A=1;
int a=-1;
for(int i=0;i<aa.length;i=i+2){ //用来存字母对应的数字
aa[i]=A++;
aa[i+1]=a--;
}
int xx=0;
for(int i=0;i<ch.length;i=i+2){
//用来存字符
ch[i]=(char)('A'+xx);
ch[i+1]=(char)('a'+xx);
xx++;
}
while(n-->0){
String str=sc.next();
int y=sc.nextInt();
int j=0;
for(;j<aa.length;j++){
if(str.equals(""+ch[j])){
break;
}
}
System.out.println(aa[j]+y);
}
}
}
第二版本:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Map<String,Object> num=new HashMap<String,Object>();
for(int i=0;i<26;i++){
num.put(((char)('a'+i))+"", -(i)-1);
num.put(((char)('A'+i))+"", i+1);
}
while(sc.hasNext()){
int t=sc.nextInt();
sc.nextLine();
while(t-->0){
String str=sc.nextLine();
String[] str2=str.split(" +");
int a1=(int) num.get(str2[0]);
int a2=Integer.valueOf(str2[1]);
System.out.println(a1+a2);
}
}
}
}