题目大意:输入一段数字,每两个代表一个大写的英文字母,转换法则和我们手机9键盘打字规则类似,第一个代表输入的字母所在的数字按键中,第二个代表字母在该按键的第几个位置。得到的字符串再根据电脑键盘从Q到M的顺序按顺序转换(Q->A,W->B...),最后再将这段字母二分,前面一个后面一个地输出出来。

思路:就是模拟啦,电脑键盘转换那边可以建一个整型数组,下标代表电脑键盘字母的ASCII值,内容存要转化的字母的ASCII值,二分的时候注意奇偶就好啦。

代码如下:

#include<stdio.h>
#include<string.h>
char s1[27]={"QWERTYUIOPASDFGHJKLZXCVBNM"};
char s2[10][5]={"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
int main()
{
	int i,n,l,s[1000];
	char a[10000],k[5000];
	for(i=0;i<26;i++)
		s[s1[i]]='A'+i;
	while(~scanf("%s",a))
	{
		getchar();
		l=0;
		for(i=0;i<strlen(a);i+=2)
			k[l++]=s2[a[i]-'0'][a[i+1]-'0'-1];
		for(i=0;i<l;i++)
			k[i]=s[k[i]];
		n=l&1;  //判断奇偶
		for(i=0;i<l/2;i++)
		{
			a[l-i*2-1]=k[i];
			a[l-i*2-2]=k[i+l/2+n];
		}
		if(n)
			a[l-i*2-1]=k[i];
		a[l]=0;
		puts(a);
	}
	return 0;
}