#include<cstdio> #include<iostream> #include<map> #include<string> using namespace std; char a[100]; int main() { string s1; s1=a; // cin>>s1; map<char,int> ma={ {'a',1}, {'b',2}, {'c',3}, {'d',1}, {'e',2}, {'f',3}, {'g',1}, {'h',2}, {'i',3}, {'j',1}, {'k',2}, {'l',3}, {'m',1}, {'n',2}, {'o',3}, {'p',1}, {'q',2}, {'r',3}, {'s',4}, {'t',1}, {'u',2}, {'v',3}, {'w',1}, {'x',2}, {'y',3}, {'z',4}, }; map<char,int> mb={ {'a',2},{'b',2},{'c',2}, {'d',3},{'e',3},{'f',3}, {'g',4},{'h',4},{'i',4}, {'j',5},{'k',5},{'l',5}, {'m',6},{'n',6},{'o',6}, {'p',7},{'q',7},{'r',7},{'s',7}, {'t',8},{'u',8},{'v',8}, {'w',9},{'x',9},{'y',9},{'z',9}, }; // cout<<s1.length(); int t1=1; int t2=2; while(cin>>s1){ int time=0; for(int i=0;i<s1.length();i++) { char temp=s1[i]; char temp1=s1[i+1]; time+=(int)ma[temp]; if(mb[temp]==mb[temp1]) { time+=t2; } } cout<<time<<endl; } return 0; }
经过最近的刷题发现了,关于这种题,最重要的是选择合适的数据结构来存储,接下来的运算实现很简单,最重要的就是找到适合的逻辑结构来存储。
就比如这个题,我可以想到的是关于将按键上的字符与需要按键多少次实现的map<char,int>来映射。
但是在怎样判断两个字符是否属于同一个按键上的,我就不会了,还是看了网课,才知道搞出两个映射来啊啊啊啊啊。欧码噶
后面的实现其实就是很简单了。
还有一个是关于C++风格字符串和C风格字符串的迷惑
//这样是对的 char a[100];//那么其实在这,写这个的意义就不大了。全程用C++风格来解决 int main() { string s1; // s1=a; 它甚至你不用写 cin>>s1; cout<<s1.length(); for(int i=0;i<s1.length();i++) { char temp=s1[i]; char temp1=s1[i+1]; } //这样也是对的 char a[100]; int main() { string s1; while(scanf("%s",a)!=EOF){ s1=a;//它的位置很关键,如果写错位置,那么它的长度也会产生很大的差别 cout<<s1.length(); } }