本文主要是介绍九度OJ 1079:手机键盘 (翻译),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述:
- 按照手机键盘输入字母的方式,计算所花费的时间如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。现在给出一串字符,需要计算出它所需要花费的时间。
- 输入:
-
一个长度不大于100的字符串,其中只有手机按键上有的小写字母
- 输出:
- 输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
- 样例输入:
-
bob www
- 样例输出:
-
7 7
- 来源:
- 2008年清华大学计算机研究生机试真题
思路:
翻译题,如果是C++也可以用map。
比较简单,直接看代码就行。
代码:
#include <stdio.h>
#include <string.h>#define M 100int id[26];void init()
{char i;for (i='a'; i<='c'; i++)id[i-'a'] = 'a';for (i='d'; i<='f'; i++)id[i-'a'] = 'd';for (i='g'; i<='i'; i++)id[i-'a'] = 'g';for (i='j'; i<='l'; i++)id[i-'a'] = 'j';for (i='m'; i<='o'; i++)id[i-'a'] = 'm';for (i='p'; i<='s'; i++)id[i-'a'] = 'p';for (i='t'; i<='v'; i++)id[i-'a'] = 't';for (i='w'; i<='z'; i++)id[i-'a'] = 'w';
}char find(char c)
{return id[c-'a'];
}int sameid(char c1, char c2)
{return (find(c1) == find(c2));
}int main(void)
{int n, i;char s[M+1];int count;init();while (scanf("%s", s) != EOF){n = strlen(s);count = 0;for (i=0; i<n; i++){if (i != 0){if (sameid(s[i], s[i-1]))count += 2;}count += s[i]-find(s[i])+1;}printf("%d\n", count);}return 0;
}
/**************************************************************Problem: 1079User: liangrx06Language: CResult: AcceptedTime:10 msMemory:912 kb
****************************************************************/
这篇关于九度OJ 1079:手机键盘 (翻译)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!