题解 | #手机键盘#

手机键盘

https://www.nowcoder.com/practice/20082c12f1ec43b29cd27c805cd476cd

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务