7-8 T9键盘 (10 分)

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37618760/article/details/88784020

7-8 T9键盘 (10 分)

在iPhone和Android大行其道之后,几乎所有的智能手机都配上了大屏幕,用手指直接戳屏幕来输入文字。在这之前,需要通过键盘来输入文字的手机上,T9键盘是不折不扣的王者。 过去风靡全球的T9键盘外观的通常外观如下图: d.jpg

如果人们需要键入”GALAXY”,那他们需要以如下顺序敲击键盘:4-2-5-2-9-9;在单手操作键盘是输入这个字串最少所需要移动手指的次数就是4次(一开始将手指放在4上不计入移动次数中) 现在给你一个仅包含大写字母的字符串,请你计算单手操作T9键盘键入该字符串最少所需要移动手指的次数。

输入格式:

输入第一行一个整数T(T<=50)代表输入数据组数 每组数据一行,一个字符串s表示待输入的字符串,该字符串由大写字母组成,且长度不超过50。

输出格式:

每组输出一行;首先输出Case #C:(C代表数据编号,从1开始直至T);紧跟一个空格符后输出键入该字符串最少所需要移动手指的次数。

输入样例:

在这里给出一组输入。例如:

3
GALAXY
ABC
ADGJM

输出样例:

在这里给出相应的输出。例如:

Case #1: 4
Case #2: 0
Case #3: 4

思路分析:很简单的字符串处理问题,只有一个地方需要注意:就是第一次按下去是不用计算次数的。我的思路是判断字符,然后设立一个num数组,用来存储各个字符对应的数字。

       然后对数组中的数字进行判断,如果说i-1和i的数字相同,说明是同一个按键,这个时候就不用计数了,否则进行自增1的操作。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
    int a;    string str;
    cin>>a;
    getchar();
    int num[105]={0};
    int k;
    for(int i=1;i<=a;i++){
        k=0;
        getline(cin,str);
        int len=str.size();
        //cout<<len<<endl;
        for(int i=0;i<len;i++){
            if(str[i]=='A'||str[i]=='B'||str[i]=='C')
               num[i]=2;
            else if(str[i]=='D'||str[i]=='E'||str[i]=='F')
               num[i]=3;
            else if(str[i]=='G'||str[i]=='H'||str[i]=='I')
               num[i]=4;
            else if(str[i]=='J'||str[i]=='K'||str[i]=='L')
               num[i]=5;
            else if(str[i]=='M'||str[i]=='N'||str[i]=='O')
               num[i]=6;
            else if(str[i]=='P'||str[i]=='Q'||str[i]=='R'||str[i]=='S')
               num[i]=7;
            else if(str[i]=='T'||str[i]=='U'||str[i]=='V')
               num[i]=8;
            else if(str[i]=='W'||str[i]=='X'||str[i]=='Y'||str[i]=='Z')
               num[i]=9;
        }
    for(int i=1;i<len;i++){
//        cout<<num[i];

        if(num[i]!=num[i-1])
            k++;
    }
    printf("Case #%d: %d\n",i,k);



}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37618760/article/details/88784020