手机键盘:按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。

博客围绕手机键盘输入字母的时间计算展开,介绍了输入规则,如同一按键上连续字符需等待,不同按键可直接按。给出输入输出描述及示例,还提到非连续按同一键无需等待时间,最后给出代码但未展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:手机键盘

题目描述:

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

输入描述:

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

输出描述:

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

示例:

输入:

bob
www

输出:

7
7

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    char str[101];  //存放读取的字符串
    char lst[8][5]={"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};  //手机键盘
    while(scanf("%s", str)!=EOF){  //读取多组数据
        int len=strlen(str), strm[101];  //strm存放字符串中每个字符所在的键
        int alltime=0;  //计算总的时间
        for(int i=0; i<len; i++){
            for(int m=0; m<8; m++){  //遍历手机键盘,查询字符str[i]
                int templen=strlen(lst[m]);
                for(int n=0; n<templen; n++){
                    if(str[i]==lst[m][n]){  //找到了字符str[i]
                        alltime += (n+1);  //把该字符需要按键的次数n+1加到总的时间里
                        strm[i] = m;  //记录该字符所在的键
                    }
                }
            }
            if(i>0){
                if(strm[i]==strm[i-1]) alltime += 2;  //如果当前字符和前一个字符所在键相同,则加上等待时间2
            }
        }
        printf("%d\n", alltime);  //输出总的时间
    }
}

注意点:

当碰到如字符串ada的时候,时间计算规则如下:(a=1)+(d=1)+(a=1)= 3;也就是说,如果一个键不是连续按的话就不需要两个时间的等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值