一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
bob www
7 7
#include <cstdio> #include <string> using namespace std; int main() { int keyboard[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}; char str[1000]; string input; while(scanf("%s",str)!=EOF){ input=str; int time=0; for(int i=0;i<input.length();i++){ time+=keyboard[input[i]-'a']; if(i!=0 && input[i]-input[i-1]==keyboard[input[i]-'a']-keyboard[input[i-1]-'a']){ time+=2; } } printf("%d\n",time); } return 0; }
//如果用数组来统计按键次数,若相邻两个字母在同一个键上的判断为: //数组下标差=数组存储按键次数差 #include<cstdio> #include<iostream> #include<string> using namespace std; //预处理按键位置 int mod[26] = {0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7}; //查找按键位置 int FindAnjian(char a){ return mod[a-'a']; } int main(){ string str; while(cin >> str){ int time=0; int len=str.size(); for(int i=0;i<len;++i){ if(i>0 && FindAnjian(str[i])==FindAnjian(str[i-1])){ time+=2; } int temp=1;//统计按键次数 int cur = str[i]-'a'; while(cur>0 && mod[cur]==mod[cur-1]){ cur--; } while(cur!=str[i]-'a'){ temp++; cur++; }//统计按键次数结束 time+= temp; } cout<<time<<endl; } return 0; }
//1符号 2ABC 3DEF 4GHI 5JKL 6MNO 7PQRS 8TUV 9WXYZ #include<iostream> #include<map> using namespace std; char str[101]; map<char,int>mp,time_mp; int main(){ time_mp['a']=time_mp['d']=time_mp['g']=time_mp['j']=time_mp['m']= time_mp['p']=time_mp['t']=time_mp['w']=1; time_mp['b']=time_mp['e']=time_mp['h']=time_mp['k']=time_mp['n']= time_mp['q']=time_mp['u']=time_mp['x']=2; time_mp['c']=time_mp['f']=time_mp['i']=time_mp['l']=time_mp['o']= time_mp['r']=time_mp['v']=time_mp['y']=3; time_mp['z']=time_mp['s']=4; mp['a']=mp['b']=mp['c']=2; mp['d']=mp['e']=mp['f']=3; mp['g']=mp['h']=mp['i']=4; mp['j']=mp['k']=mp['l']=5; mp['m']=mp['n']=mp['o']=6; mp['p']=mp['q']=mp['r']=mp['s']=7; mp['t']=mp['u']=mp['v']=8; mp['w']=mp['x']=mp['y']=mp['z']=9; while(scanf("%s",str)!=EOF){ int res=0,str_len=0; for(;str[str_len];str_len++); for(int i=0;i<str_len;i++){ if(i>0){ if(mp[str[i]]==mp[str[i-1]])res+=2; } res+=time_mp[str[i]]; } cout<<res<<endl; } return 0; }
#include<iostream> #include<cstring> using namespace std; int main(){ char str1[100]; while(scanf("%s",str1)!=EOF){ int wait=2,i,j,t=1,time_sum=0; int len=strlen(str1),flag[len]; for(i=0;i<len;i++){//用switch判断按一个字母要多长时间,用flag判断字母是否连续 switch(str1[i]){ case 'a':flag[i]=2;time_sum+=t;break; case 'd':flag[i]=3;time_sum+=t;break; case 'g':flag[i]=4;time_sum+=t;break; case 'j':flag[i]=5;time_sum+=t;break; case 'm':flag[i]=6;time_sum+=t;break; case 'p':flag[i]=7;time_sum+=t;break; case 't':flag[i]=8;time_sum+=t;break; case 'w':flag[i]=9;time_sum+=t;break; case 'b':flag[i]=2;time_sum+=2*t;break; case 'e':flag[i]=3;time_sum+=2*t;break; case 'h':flag[i]=4;time_sum+=2*t;break; case 'k':flag[i]=5;time_sum+=2*t;break; case 'n':flag[i]=6;time_sum+=2*t;break; case 'q':flag[i]=7;time_sum+=2*t;break; case 'u':flag[i]=8;time_sum+=2*t;break; case 'x':flag[i]=9;time_sum+=2*t;break; case 'c':flag[i]=2;time_sum+=3*t;break; case 'f':flag[i]=3;time_sum+=3*t;break; case 'i':flag[i]=4;time_sum+=3*t;break; case 'l':flag[i]=5;time_sum+=3*t;break; case 'o':flag[i]=6;time_sum+=3*t;break; case 'r':flag[i]=7;time_sum+=3*t;break; case 'v':flag[i]=8;time_sum+=3*t;break; case 'y':flag[i]=9;time_sum+=3*t;break; case 's':flag[i]=7;time_sum+=4*t;break; case 'z':flag[i]=9;time_sum+=4*t;break; } if(i>=1&&flag[i]==flag[i-1]) time_sum+=wait; } printf("%d\n",time_sum); } return 0; }
#include<iostream> #include<string> using namespace std; int nums[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}; //该函数用于输出字符串所用的总时间 void total_time(string s) { int waiting_time=0;//初始化总的等待时间 int total=0;//初始化总时间 int temp_1; int temp_2; //遍历相邻字符,n个字符需要比较n-1次 for(int i=0;i<s.size()-1;i++) { temp_1 = s[i+1]-s[i]; temp_2 = nums[int(s[i+1])-97]-nums[int(s[i])-97]; //如果两个字符对应的按键次数之差等于他们的距离之差,说明在同一个键上 if(temp_2==temp_1) { waiting_time+=2; } total += nums[int(s[i])-97]; } total += nums[int(s[s.size() - 1]) - 97] + waiting_time; cout<<total<<endl; } int main() { vector<string> v; string s; while(cin>>s) total_time(s); system("pause"); return 0; }
#include<stdio.h> #include<string.h> int main() { /*预存储数据,将键盘字母、最小时间保存在数组中*/ int Keybord[26]={ 1,1,1,//abc 2,2,2,//def 3,3,3,//ghi 4,4,4,//jkl 5,5,5,//mno 6,6,6,6,//pqrs 7,7,7,//tuv 8,8,8,8};//wxyz,存储26个字母在键盘上的位置 int minitime[26]={ 1,2,3,//abc 1,2,3,//def 1,2,3,//ghi 1,2,3,//jkl 1,2,3,//mno 1,2,3,4,//pqrs 1,2,3,//tuv 1,2,3,4}; //wxyz 存储26个字母输入的最小时间 char input[120]; scanf("%s",input); int l=strlen(input),i,time=0; for(i=0;i<l;i++) { int temp=input[i]-97; if(i>=1) { if(Keybord[temp]==Keybord[input[i-1]-97])//如果后相邻两个字母在键盘上的位置相同 time=time+2; } time=time+minitime[temp]; } printf("%d",time); return 0; }
/* 1 : abc 2: def 3:ghi 4:jkl 5:mno 6:pqrs 7:tuv 8:wxyz */ #include <stdio.h> (737)#include <iostream> using namespace std; int loc(char c){ switch(c){ case 'a':return 11;case 'b':return 12;case 'c': return 13; case 'd':return 21;case 'e':return 22;case 'f': return 23; case 'g':return 31;case 'h':return 32;case 'i':return 33; case 'j':return 41;case 'k':return 42;case 'l': return 43; case 'm':return 51;case 'n':return 52;case 'o': return 53; case 'p':return 61;case 'q':return 62;case 'r': return 63;case 's':return 64; case 't':return 71;case 'u':return 72;case 'v': return 73; case 'w':return 81;case 'x':return 82;case 'y':return 83; case 'z':return 84; } } int main(){ char str[101]; while(scanf("%s",str) != EOF){ int time = loc(str[0])%10;//取按的次数 for(int i=0;str[i+1]!= NULL;i++){ if(loc(str[i+1])/10 == loc(str[i])/10){ time+= 2; time+= (loc(str[i+1])%10); } else time+= (loc(str[i+1])%10); } cout << time << endl; } }
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int keyboard[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}; char str[101]; while(~scanf("%s", str)) { int time = keyboard[str[0] - 'a']; int len = strlen(str); for(int i = 1; i < len; i++) { time += keyboard[str[i] - 'a']; if(keyboard[str[i] - 'a'] - keyboard[str[i - 1] - 'a'] == str[i] - str[i - 1]) time += 2; } printf("%d\n", time); } return 0; }看了最高赞答案才写成这样,我写不了这么简洁,我莫得那个脑子。
#include<iostream> #include<cstdio> using namespace std; int keboardTab[26] = { 1,2,3, // abc 1,2,3, // def 1,2,3, // ghi 1,2,3, // jkl 1,2,3, // mno 1,2,3,4, // pqrs 1,2,3, // tuv 1,2,3,4, // wxyz }; int main() { string s; while(cin>> s) { int time = 0; for(int i=0; i < s.size(); i++) { time += keboardTab[s[i] - 'a']; if(i != 0 && s[i] - s[i-1] == keboardTab[s[i] - 'a'] - keboardTab[s[i-1] - 'a']) { time +=2; } } cout<<time<<endl; } return 0; }
#include <iostream> #include <string> using namespace std; int main(){ int times[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 }; int button[26] = { 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7,7, 8,8,8, 9,9,9,9 }; string str; while(cin>>str){ int num = times[str[0]-'a']; for(int i=1; i<str.length();i++){ num += times[str[i]-'a']; if(button[str[i]-'a']==button[str[i-1]-'a']) num += 2; } cout << num << endl; } }
#include <iostream> #include <cstdio> #include <string> #include <iomanip> using namespace std; bool phonekeyboard(string str){ int i; int time=0; int A[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}; for(i=0;i<str.length();i++){ time=time+A[str[i]-'a']; if(i!=0 && A[str[i]-'a']-A[str[i-1]-'a']==str[i]-str[i-1]) time=time+2; } cout<<time<<endl; } int main(){ string str; cin>>str; if(str.length()>100) return 0; phonekeyboard(str); return 0; }
#include<iostream> #include<cstdio> using namespace std; //数据预处理 const int keytab[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}; int main(){ string str; while(cin>>str){ int time = 0; for(int i=0; i<str.length(); i++){ time += keytab[str[i]-'a']; if(i!=0&&(str[i]-str[i-1]==keytab[str[i]-'a']-keytab[str[i-1]-'a'])){ time += 2; } } cout<<time<<endl; } return 0; }
#include "stdio.h" #include "stdlib.h" #include "string.h" /* 1 2 3 abc def ghi 4 5 6 jkl mno pqrs 7 8 tuv wxyz */ char keyboard[8][4] = {{'a','b','c',-1},{'d','e','f',-1},{'g','h','i',-1}, {'j','k','l',-1},{'m','n','o',-1},{'p','q','r','s'}, {'t','u','v',-1},{'w','x','y','z'}}; int which_key(char ch) //该按哪个键 { int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 4; j++) { if (keyboard[i][j] == ch) { return (i + 1); } } } } int num_key(char ch) //该按几次 { int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 4; j++) { if (keyboard[i][j] == ch) { return (j + 1); } } } } int main() { int len, last_key, i, t; char str[200] = {0}; while (scanf("%s", str) != EOF) { last_key = 0; t = 0; len = strlen(str); for (i = 0; i < len; i++) { if (last_key == which_key(str[i])) t += 2; //和上一次按的键相同,续2秒 t += num_key(str[i]); //按键了,每按一次续1s last_key = which_key(str[i]); //记录这次按的键 } printf("%d\n", t); } return 0; }
#include <iostream> #include <cstring> using namespace std; int lastGroup; int currentGroup; int press; void judgeGroup(char ch){ switch(ch){ case 'a':currentGroup=1;press=1;break; case 'b':currentGroup=1;press=2;break; case 'c':currentGroup=1;press=3;break; case 'd':currentGroup=2;press=1;break; case 'e':currentGroup=2;press=2;break; case 'f':currentGroup=2;press=3;break; case 'g':currentGroup=3;press=1;break; case 'h':currentGroup=3;press=2;break; case 'i':currentGroup=3;press=3;break; case 'j':currentGroup=4;press=1;break; case 'k':currentGroup=4;press=2;break; case 'l':currentGroup=4;press=3;break; case 'm':currentGroup=5;press=1;break; case 'n':currentGroup=5;press=2;break; case 'o':currentGroup=5;press=3;break; case 'p':currentGroup=6;press=1;break; case 'q':currentGroup=6;press=2;break; case 'r':currentGroup=6;press=3;break; case 's':currentGroup=6;press=4;break; case 't':currentGroup=7;press=1;break; case 'u':currentGroup=7;press=2;break; case 'v':currentGroup=7;press=3;break; case 'w':currentGroup=8;press=1;break; case 'x':currentGroup=8;press=2;break; case 'y':currentGroup=8;press=3;break; case 'z':currentGroup=8;press=4;break; } } int main(){ string str; int time; while(cin>>str){ time =0;lastGroup=-1;currentGroup=-2;press=0;//初始化 char ch; for(int i=0; i<str.length(); i++){ ch=str[i]; judgeGroup(ch); if(currentGroup==lastGroup) time+=2; time+=press; lastGroup=currentGroup; } cout<<time<<endl; } }
#include<iostream> #include<cstdio> using namespace std; int keytab[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}; int main(){ string str; while(cin>>str){ int time=0; for(int i=0;i<str.size();i++){ time+=keytab[str[i]-'a']; if(i!=0 && str[i]-str[i-1]==keytab[str[i]-'a']-keytab[str[i-1]-'a']){ time+=2; } } cout<<time<<endl; } return 0; }