手机键盘(清华复试上机)

前言:

21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。

题目描述:

按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。

输入描述

一个长度不大于100的字符串,其中只有手机按键上有的小写字母

输出描述:

输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间

解答

#include<stdio.h>
#include<cstring>

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()
{
    
    
	char str[101];
	for (int i = 0; i < 101; i++)
		str[i] = NULL;
	while (scanf("%s", str) != EOF) {
    
    
		int time = 0;
		for (int i = 0; i < strlen(str); i++) {
    
    
			time += keytab[str[i] - 'a'];
			if (i != 0 && ((str[i] - str[i - 1]) == (keytab[str[i]-'a'] - keytab[str[i - 1]-'a'])))
				time = time + 2 ;
		}
		printf("%d\n", time);
		for (int i = 0; i < 101; i++)
			str[i] = NULL;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44897291/article/details/112740063