山东科技大学oj 1490 该按哪些键

Problem F: 该按哪些键

Description

       Peter在手机上打字时一直用全键键盘来输入,但最近不知道怎么搞的,把全键键盘弄丢了,只剩下了9键键盘。一项喜欢高科技的Peter却不会用9键键盘打字。So,please help him!

       9键键盘如上图所示。如果要输入字母'A',我们只需要按一次数字键2;如果要输入空格,则需要按数字键0;如果要输入字母'B'的话,我们需要连续按两次数字键2,按键序列为22。如果要输入的两个大写字母都在同一个数字键上,则需要按数字1作为分隔符,例如输入字母’JL’,需要先按一次数字键5,再按一次数字键1,再按3次数字键5,按键序列为51555。

       为了使问题简化,我们假设Peter要输入的内容只有大写英文字母和空格。

Input

    输入有多组测试用例。每组测试用例占一行,为Peter要输入的内容,不超过20000个字符。

Output

    对于每组测试用例,输出一行,为得到所有内容所要按下的按键序列。

Sample Input

I LOVE YOU HELLO WORLD

Sample Output

444055566688833099966688 44335551555666096667775553

HINT

Append Code

答案:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

prentf(char *s,int len)

{

    int i,j;//I LOVE YOU

    for(i=0;i<len;i++)

    {

        if(s[i] >= 'A'&&s[i] <= 'C')//2

        {

            if(s[i]-s[i-1] <= 2&&s[i-1] >= 'A'&&s[i-1] <= 'C')

            printf("1");

            for(j = 0;j<=s[i]-'A';j++)

            printf("2");

        }

        if(s[i] >= 'D'&&s[i] <= 'F')//3

        {

            if(s[i]-s[i-1] <= 2&&s[i-1] >= 'D'&&s[i-1] <= 'F')

            printf("1");

            for(j = 0;j<=s[i]-'D';j++)

            printf("3");

        }

        if(s[i] >= 'G'&&s[i] <= 'I')//4

        {

            if(s[i]-s[i-1] <= 2&&s[i-1] >= 'G'&&s[i-1] <= 'I')

            printf("1");

            for(j = 0;j<=s[i]-'G';j++)

            printf("4");

        }

        if(s[i] >= 'J'&&s[i] <= 'L')//5

        {

            if(s[i]-s[i-1] <= 2&&s[i-1] >= 'J'&&s[i-1] <= 'L')

            printf("1");

            for(j = 0;j<=s[i]-'J';j++)

            printf("5");

        }

        if(s[i] >= 'M'&&s[i] <= 'O')//6

        {

            if(s[i]-s[i-1] <= 2&&s[i-1] >= 'M'&&s[i-1] <= 'O')

            printf("1");

            for(j = 0;j<=s[i]-'M';j++)

            printf("6");

        }

        if(s[i] >= 'P'&&s[i] <= 'S')//7

        {

            if(s[i]-s[i-1] <= 3&&s[i-1] >= 'P'&&s[i-1] <= 'S')

            printf("1");

            for(j = 0;j<=s[i]-'P';j++)

            printf("7");

        }

        if(s[i] >= 'T'&&s[i] <= 'V')//8

        {

            if(s[i]-s[i-1] <= 2&&s[i-1] >= 'T'&&s[i-1] <= 'V')

            printf("1");

            for(j = 0;j<=s[i]-'T';j++)

            printf("8");

        }

        if(s[i] >= 'W'&&s[i] <= 'Z')//9

        {

            if(s[i]-s[i-1] <= 3&&s[i-1] >= 'W'&&s[i-1] <= 'Z')

            printf("1");

            for(j = 0;j<=s[i]-'W';j++)

            printf("9");

        }

        if(s[i] == ' ')

        printf("0");

         

    }

    printf("\n");

}



int main()

{

    char *s;

    char ch[10001];

    int n,i,len;

    scanf("%d",&n);

    while(gets(ch))

    {

        len = strlen(ch);

        s = (char*)malloc(len*sizeof(char)+1);

        strcpy(s,ch);

        prentf(s,len);

    }     

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值