SDUT-2618 手机键盘(JAVA*)

版权声明:欢迎转载,也请注明原文地址 https://blog.csdn.net/wzy_2017/article/details/80058374

手机键盘

Time Limit: 1000 ms  Memory Limit: 65536 KiB

Problem Description

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

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

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

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

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

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

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

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

Input

 

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

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

Output

 

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

Sample Input

bob
www

Sample Output

7
7

Hint

 

Source

“师创杯”山东理工大学第五届ACM程序设计竞赛

import java.util.*;
class Phone{
	int sum=0;
	char s[][]= {{'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'}};
	Phone(String ss)
	{
		int ii=-1,jj=-1,i,j;
		for(int k=0;k<ss.length();k++)
		{
			char c=ss.charAt(k);
			int flag=0;
			for(i=0;i<s.length;i++)
			{
				for(j=0;j<s[i].length;j++)
				{
					if(s[i][j]==c)
					{
						if(ii==i&&ii!=-1)
						{
							if(jj==j&&jj!=-1)
								this.sum=this.sum+2+j+1;
							else
							this.sum=this.sum+2+j+1;
						}
						else
						this.sum+=j+1;
						ii=i;jj=j;
						flag=1;
						break;
					}
				}
				if(flag==1)
					break;
			}
		}
	}
	int get()
	{
		return sum;
	}
}

public class Main {
	public static void main(String args[]) {
		Scanner cin = new Scanner(System.in);
		while(cin.hasNext())
		{
			String ss=cin.nextLine();
			Phone x=new Phone(ss);
			int ans=x.get();
			System.out.println(ans);
		}
		cin.close();
	}
}

猜你喜欢

转载自blog.csdn.net/wzy_2017/article/details/80058374
今日推荐