1.题目
1.1题目描述
手机的键盘是这样的:
1 | 2 abc | 3 def |
4 ghi | 5 jkl | 6 mno |
7 pqrs | 8 tuv | 9 wxyz |
* | 0 | # |
要按出英文字母就必须要按数字键多下。例如要按出x就得按9两下,第一下会出w,而第二下会把w变成x。0键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
1.2输入
一行一个句子,只包含英文小写字母和空格,且不超过200个字符。
1.3输出
一行一个整数,表示按键盘的总次数。
1.4样例输入
i have a dream
1.5样例输出
23
2.题解
2.1思路
Step1.输入字符数组
Step2.先判断字符数组的元素是否是’\n’,也即是否回车(表示输入的结束),若是,不再进行后续判断;若否,则进行Step3
Step3.通过一个reverse函数对每个字符数组的元素进行按键次数的判断,每次得到的按键次数加到变量sum中记录总次数
Step4.输出sum
2.2代码
(用C写的,有更好的写法还请大家指出)
#include<stdio.h>
int reverse(char a);
int main(void)
{
char a[200];
int i, sum = 0;
for (i=0; i<200; i++)
{
scanf("%c", &a[i]);
if (a[i] == '\n')//判断字符数组的元素是否是'\n'
break;
sum = sum + reverse(a[i]);
//reverse函数:返回字符数组每个元素进行按键次数的判断
//sum:按键总次数
}
printf("%d", sum);
}
int reverse(char a)
{
int val;
switch (a)
{
case 'a':
case 'd':
case 'g':
case 'j':
case 'm':
case 'p':
case 't':
case 'w':
case ' ':
{
val = 1;
break;
}
case 'b':
case 'e':
case 'h':
case 'k':
case 'n':
case 'q':
case 'u':
case 'x':
{
val = 2;
break;
}
case 'c':
case 'f':
case 'i':
case 'l':
case 'o':
case 'r':
case 'v':
case 'y':
{
val = 3;
break;
}
case 's':
case 'z':
{
val = 4;
break;
}
}
return val;
}