首页 > 试题广场 >

手机键盘

[编程题]手机键盘
  • 热度指数:34116 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。

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


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

输入

bob
www

输出

7
7
#include<stdio.h>
#include<string.h>
int fun(char a){
	switch(a){
		case 'a': return 1;
		case 'b': return 2;
		case 'c': return 3;
		case 'd': return 1;
		case 'e': return 2;
		case 'f': return 3;
		case 'g': return 1;
		case 'h': return 2;
		case 'i': return 3;
		case 'j': return 1;
		case 'k': return 2;
		case 'l': return 3;
		case 'm': return 1;
		case 'n': return 2;
		case 'o': return 3;
		case 'p': return 1;
		case 'q': return 2;
		case 'r': return 3;
		case 's': return 4;
		case 't': return 1;
		case 'u': return 2;
		case 'v': return 3;
		case 'w': return 1;
		case 'x': return 2;
		case 'y': return 3;
		case 'z': return 4;
		
		
		
		
		
	} 
	return 0;
}
int main(){
	char str[100],i;
	while(scanf("%s",&str)!=EOF){
		int length=strlen(str);
		int sum=0;
		for(i=0;i<length;i++){
			
			sum=sum+fun(str[i]);
			if(i!=0&&
			str[i]-str[i-1]==fun(str[i])-fun(str[i-1])){
				sum+=2;
			}
		}
		
		printf("%d\n",sum);
		
		
		
		
		

	}
	
}

发表于 2024-03-27 23:59:16 回复(0)
#include <stdio.h>
#include <string.h>

char arr[9][3];
int abc[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]; // 字符串
    while (scanf("%s", str) != EOF) {
        int time = 0; // 时间
        for (int i = 0; i < strlen(str); ++i) { // 遍历字符串
            time += abc[str[i] - 'a']; // 先加上按到当前字母的次数(即时间)
            if (i != 0 &&
                str[i] - str[i - 1] == abc[str[i] - 'a'] - abc[str[i - 1] - 'a']) { // 若当前字母与上一个字母在一个按键上,在原来的时间基础上+2
                time += 2;
            }
        }
        printf("%d\n", time);
    }
    return 0;
}

发表于 2024-02-05 22:52:24 回复(0)

#include <stdio.h>
#include <string.h>
int main() {
    char str[100];
    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}; //字符ascci值
    int hash[26] = {1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8};
    while (scanf("%s", str) != EOF) {
        int time = 0;
        for (int i = 0; i < strlen(str); i++) {
            time += keyTab[str[i] - 'a'];
            if (hash[str[i]-'a']==hash[str[i+1]-'a']){
                time+=2;
            }
        }
        printf("%d\n", time);
    }
    return 0;
}

发表于 2023-04-25 18:12:32 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char s[101];
    int time[] = {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 type[] = {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};
    while (scanf("%s", s) != EOF) {
        int len = strlen(s);
        int sum = time[s[0] - 'a'];
        for (int i = 1; i < len; i ++) {
            if (type[s[i]-'a'] == type[s[i - 1]-'a']) {
                sum += 2;
            }
            sum += (time[s[i] - 'a']);
        }
        printf("%d\n", sum);
    }
    return 0;
}

发表于 2023-02-12 13:30:58 回复(0)
小白憋了半天写出来的代码,一个函数判断是否需要等待,一个函数判断按键时间。
#include<stdio.h>
int KeyValue(char k)//判断上次是否为同一按键
{
    static int two = 0,three = 0,four = 0,five = 0,six = 0,seven = 0,eight = 0,nine = 0;
    switch(k)
    {
        case 'a':;case 'b':;case 'c':
            {
                if(two != 0)
                {
                    return 2;
                    break;
                }
                two = 1;three = 0,four = 0,five = 0,six = 0,seven = 0,eight = 0;nine = 0;
                return 0;
                break;
            }
        case 'd':;case 'e':;case 'f':
            {
                if(three != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 1,four = 0,five = 0,six = 0,seven = 0,eight = 0;nine = 0;
                return 0;
                break;
            }
        case 'g':;case 'h':;case 'i':
            {
                if(four != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 0,four = 1,five = 0,six = 0,seven = 0,eight = 0;nine = 0;
                return 0;
                break;
            }
        case 'j':;case 'k':;case 'l':
            {
                if(five != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 0,four = 0,five = 1,six = 0,seven = 0,eight = 0;nine = 0;
                return 0;
                break;
            }
        case 'm':;case 'n':;case 'o':
            {
                if(six != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 0,four = 0,five = 0,six = 1,seven = 0,eight = 0;nine = 0;
                return 0;
                break;
            }
        case 'p':;case 'q':;case 'r':;case 's':
            {
                if(seven != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 0,four = 0,five = 0,six = 0,seven = 1,eight = 0;nine = 0;
                return 0;
                break;
            }
        case 't':;case 'u':;case 'v':
            {
                if(eight != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 0,four = 0,five = 0,six = 0,seven = 0,eight = 1;nine = 0;
                return 0;
                break;
            }
        case 'w':;case 'x':;case 'y':;case 'z':
            {
                if(nine != 0)
                {
                    return 2;
                    break;
                }
                two = 0;three = 0,four = 0,five = 0,six = 0,seven = 0,eight = 0;nine = 1;
                return 0;
                break;
            }
        default:two = 0;three = 0,four = 0,five = 0,six = 0,seven = 0,eight = 0;nine = 0;
    }
    return 0;
}
int Time(char k)//按键时间
{
    
    switch(k)
    {
        case 'a':;case 'd':;case 'g':;case 'j':;case 'm':;case 'p':;case 't':;case 'w':
            return 1 + KeyValue(k);
            break;
        case 'b':;case 'e':;case 'h':;case 'k':;case 'n':;case 'q':;case 'u':;case 'x':
            return 2 + KeyValue(k);
            break;
        case 'c':;case 'f':;case 'i':;case 'l':;case 'o':;case 'r':;case 'v':;case 'y':
            return 3 + KeyValue(k);
            break;
        case 's':;case 'z':
            return 4 + KeyValue(k);
            break;
    }
    return 0;
}
int main(void)
{
    char key[100];
    int s = 0,l;
    scanf("%s",key);
    l = strlen(key);
    for(int i = 0;i < l; i++)
    {
        s += Time(key[i]);
    }
    printf("%d\n",s);
    KeyValue(0);
    return 0;
}



发表于 2021-11-08 23:08:45 回复(0)