假设有九宫格输入法键盘布局如下:
[ 1,.?! ] [ 2ABC ] [ 3DEF ]
[ 4GHI ] [ 5JKL ] [ 6MNO ]
[ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
[ 0空 ]
注意:中括号[ ]
仅为了表示键盘的分隔,不是输入字符。每个中括号中,位于首位的数字字符即是键盘的按键,按一下即可输入该数字字符。多次按同一个键,则输入的字符依次循环轮流,例如按两次3
,则输入D
;按5次7
,则输入S
;按6次2
,则输入A
。按键0
的输入组合是0
和空格
字符,即按两次0
输入空格。
你需要对于给定的按键组合,给出该组合对应的文本。
输入格式:
输入在一行中给出数个字符的按键组合(例如 999
表示按3次9
),每个字符的按键组合之间用空格间隔,最后一个输入法组合之后以换行结束。输入数据至少包括一个字符的按键组合,且输入总长度不超过500个字符。
输出格式:
在一行中输出该按键组合对应的文本。
输入样例:
22 5555 22 666 00 88 888 7777 4444 666 44
输出样例:
ALAN TURING
为什么答案错误?
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
int main()
{
char a[10][5]={{'1','.','?','!' }, {'2','A','B','C'}, {'3','D','E','F'} ,{'4','G','H','I'}, {'5','J','K','L'},{'6','M','N','O'},{'7','P','Q','R','S'},{'8','T','U','V'} ,{'9','W','X','Y','Z'} ,{'0',' '} };
int i=0,j,t;
int b[10],len;
for(i=0;i<10;i++)
b[i]=-1;
char c[10001];
gets(c);
len=strlen(c);
c[len]=' ';
len++;
c[len]='\0';
//puts(c);
i=0;
while(1)
{
if(c[i]!=' ')
{
b[c[i]-'0']++;
}
else
{
t = c[i-1]-'0';
//printf("%d ",t);
if(t!=0)
{
printf("%c",a[t-1][b[t]]);
}
else
{
printf("%c",a[9][b[t]]);
}
b[t]=-1;
}
i++;
if(c[i]=='\n')
break;
}
return 0;
}
题目我忽略了轮流
/* Note:Your choice is C IDE */
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,len1,len2,t,k=0;
char a[10][6]={"0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ"};
char b[1000];
gets(b);
len2=strlen(b);
for(i=0;i<len2;i++)
{
t=b[i]-'0';
len1=strlen(a[t]);
while(b[i]!=' '&&b[i]!='\0')
{
i++;
k++;
}
j= k%len1==0?len1-1:k%len1-1;
printf("%c",a[t][j]);
k=0;
}
printf("\n");
return 0;
}