牛客网 -- 计算机历年考研复试上机题 -- 手机键盘
2019-07-18 22:46
323 查看
题目描述
按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。
输入描述:
一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输出描述:
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
示例1
输入
复制
bob www
输出
复制
7 7
我的代码:
1、思考了许久,不知道应该怎么表示abc的关系,无论怎样想都感觉很复杂,于是决定暴力模拟...
2、虽然样例可以通过,但是oj还是超时了...
[code]#include <iostream> #include <cstdio> #include <vector> #include <cstring> #include <string> #include <algorithm> using namespace std; const int maxn = 105; char str[maxn]; string tag[8] = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; int main(){ while(scanf("%s", str)){ int len = strlen(str); int cnt = 0; for (int i = 0; i < len; ++i){ int str_cnt = 0; bool flag = true; for (int j = 0; j < 8 && (flag==true); ++j) { if(tag[j].find(str[i]) != string::npos){ string tmp = tag[j]; int size = tmp.size(); for (int k = 0; k < size; ++k) { if(tmp[k] == str[i]){ str_cnt += k+1; flag = false; break; } } } if(tag[j].find(str[i]) != string::npos && tag[j].find(str[i+1]) != string::npos){ str_cnt += 2; } } cnt += str_cnt; } printf("%d", cnt); } return 0; }
参考思路:
1、真的很巧妙,没有直接考虑abc去转换,而是直接写成每个按键的等待时间段!
2、判断两个字母是否在同一个按键上,如果在同一个按键上,下标差就等于按键次数差
[code]链接:https://www.nowcoder.com/questionTerminal/20082c12f1ec43b29cd27c805cd476cd 来源:牛客网 #include<iostream> #include<string> using namespace std; int main() { int key[26] = {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}; string str; while(cin>>str) { int count = key[str[0]-'a']; for(int i=1;i<str.size();++i) { count += key[str[i]-'a']; if(key[str[i]-'a']-key[str[i-1]-'a']==str[i]-str[i-1])//判断是否在同一个按键上 count+=2; } cout<<count<<endl; } }
相关文章推荐
- 北京理工大学大学计算机历年考研复试上机题
- 后缀子串排序(后缀数组) - 上海交通大学计算机历年考研复试上机题
- 清华大学计算机历年考研复试上机题01
- 二叉排序树——华中科技大学计算机历年考研复试上机题
- 华中科技大学计算机历年考研复试上机题
- 2015北邮计算机考研复试上机题解
- 北邮2018计算机院考研复试上机题解+结果统计
- 2013北邮计算机考研复试上机题解
- 2016北邮计算机考研复试上机题解
- 2014北邮计算机考研复试上机题解(上午+下午)
- 北京航空航天大学计算机系考研复试上机真题及答案---2014
- 2014北邮计算机考研复试上机题解(上午+下午)
- 华中科技大学_2008___考研计算机_复试上机
- 浙江大学2005年计算机考研上机复试
- 二叉查找树(华中科技大学计算机考研复试上机题)
- 牛客网计算机复试上机习题之成绩排序
- 华中科技大学_2010___考研计算机_复试上机
- 2012北邮计算机考研复试上机题解
- 华中科技大学_2006保研___考研计算机_复试上机
- 2014年天勤计算机考研复试上机练习赛(2):世界杯来了