版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37618760/article/details/88784020
7-8 T9键盘 (10 分)
在iPhone和Android大行其道之后,几乎所有的智能手机都配上了大屏幕,用手指直接戳屏幕来输入文字。在这之前,需要通过键盘来输入文字的手机上,T9键盘是不折不扣的王者。 过去风靡全球的T9键盘外观的通常外观如下图:
如果人们需要键入”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;
}