• Java练习 SDUT-2618_手机键盘


    手机键盘

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    大家应该都见过那种九键的手机键盘,键盘上各字母的分布如下图所示。

    当我们用这种键盘输入字母的时候,对于有些字母,往往会需要按多次键才能输入。

    比如:a, b, c 都在“2”键上,输入 a 只需要按一次,而输入 c 需要连续按三次。

    连续输入多个字母的规则如下:

    1、如果前后两个字母不在同一个按键上,则可在输入前一个字母之后直接输入下一个字母,如:ad 需要按两次键盘,kz 需要按 6 次。

    2、如果前后两个字母在同一个按键上,则输入完前一个字母之后需要等待一段时间才能输入下一个字母,如 ac,在输入完 a 之后,需要等一会儿才能输入 c。

    现在假设每按一次键盘需要花费一个时间段,等待时间需要花费两个时间段。

    现在给出一串只包含小写英文字母的字符串,计算出输入它所需要花费的时间。

    Input

    输入包含多组测试数据,对于每组测试数据:

    输入为一行只包含小写字母的字符串,字符串长度不超过100。

    Output

    对于每组测试数据,输出需要花费的时间。

    Sample Input

    bob
    www

    Sample Output

    7
    7

    题解:用一个标记标记上一次按下的键,如果这次是同一个需要等待,否则继续按。
    不用九键的胜利

    import java.util.*;
    
    public class Main
    {
    	public static void main(String[] args)
    	{
    		Scanner cin = new Scanner(System.in);
    		jian a;
    		while(cin.hasNextLine())
    		{
    			a = new jian(cin.nextLine());
    			System.out.println(a.get_sum());
    		}
    		cin.close();
    	}
    }
    
    class jian
    {
    	String s;
    	char q[][] = {{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},{'m','n','o'},{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}};
    	jian(String s)
    	{
    		this.s = s;
    	}
    	int get_sum()
    	{
    		int i,j,l,k,sum;
    		sum = 0;
    		k = -1;
    		for(i=0;i<s.length();i++)
    		{
    			for(j=0;j<q.length;j++)
    			{
    				for(l=0;l<q[j].length;l++)
    				{
    					if(q[j][l]==s.charAt(i))
    					{
    						if(k!=-1&&j==k)
    							sum += 2 + l + 1;
    						else
    							sum += l + 1;
    						k = j;
    						break;
    					}
    				}
    				if(l!=q[j].length)
    					break;
    			}
    		}
    		return sum;
    	}
    }
    
  • 相关阅读:
    Shell编程基础
    lenovo future leaer deveolpmetn program
    求1+2+...+n
    Linux下使用qq
    判断2个线段是否相交
    java大数相加
    Django路由系统
    Django框架
    HTTP协议及Django配置
    mysql索引
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9895801.html
Copyright © 2020-2023  润新知