#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();
}
}


京公网安备 11010502036488号