NOIP2010-普及组复赛模拟试题-第一题-手机
题目背景 Background
现在手机使用越来越广泛了
题目描述 Description
一般的手机的键盘是这样的:
要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,
而第二下会把 w 变成 x。0 键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子, 求出要在手机上打出这个句
子至少需要按多少下键盘。
而第二下会把 w 变成 x。0 键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子, 求出要在手机上打出这个句
子至少需要按多少下键盘。
输入输出格式 Input/output
输入格式:
一行一个句子,只包含英文小写字母和空格,且不超过 200 个字符。
输出格式:
一行一个整数,表示按键盘的总次数。
一行一个整数,表示按键盘的总次数。
输入输出样例 Sample input/output
样例测试点#1
输入样例:
i have a dream
输出样例:
23
思路:这题较为简单,可以先打表,这个比较快捷(记录每个按键所要按的次数),每次只输入一个字符,找到在表里面的答案加上计数器即可。
注意:输入数据有若干句,一行一句,所以要用文件读入。
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 int ans1[30]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4,1};//打表,统计每个按键所需的次数 4 int phone(char a[]) 5 { 6 int ans=0,i; 7 for(i=0;i<strlen(a);i++) 8 { 9 if(a[i]!=' ')//字母 10 { 11 ans+=ans1[a[i]-97];//计数器加上表内的数字 12 } 13 else //空格,计数器++ 14 { 15 ans+=1; 16 } 17 } 18 return ans; 19 } 20 int main() 21 { 22 char a[201]; 23 gets(a); 24 while(a[strlen(a)-1]!=EOF)//如果还没到文件结尾,传入函数 25 { 26 printf("%d\n",phone(a)); 27 gets(a); 28 } 29 return 0; 30 }
我不怕千万人阻挡,只怕自己投降…