版权声明:禁止转载,翻版必究 https://blog.csdn.net/qq_41341757/article/details/83513196
当我们用这种键盘输入字母的时候,对于有些字母,往往会需要按多次键才能输入。
比如: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
思路:
用一个类存储每个字母对应的数字,用另一个类存储每个字母在所在字母中的第几个
。最后字符串中的时间和等于第一个类中的数字和加上第二个类中如果两个相等的个数
乘以2;(如果按同一个键则中间停留两秒)。
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
Scanner reader = new Scanner(System.in);
while(reader.hasNext())
{
String string =reader.next();
char A[]=new char[101];
A=string.toCharArray();
int sum=0;
for(int i=0;i<A.length;i++)
{
Time time=new Time(A[i]);
int n=time.Timetime2();
sum=sum+n;
}
for(int i=1;i<A.length;i++)
{
Time time1=new Time(A[i-1]);
int m=time1.Timetime1();
Time time2=new Time(A[i]);
int n=time2.Timetime1();
if(n==m)
{
sum=sum+2;
}
}
System.out.println(sum);
}
reader.close();
}
}
class Time
{
char a;
int n;
int flag=0;
public Time(char a)
{
this.a=a;
}
public int Timetime1()
{
if(a=='a'||a=='b'||a=='c')
{
n=2;
}
if(a=='d'||a=='e'||a=='f')
{
n=3;
}
if(a=='g'||a=='h'||a=='i')
{
n=4;
}
if(a=='j'||a=='k'||a=='l')
{
n=5;
}
if(a=='m'||a=='n'||a=='o')
{
n=6;
}
if(a=='p'||a=='q'||a=='r'||a=='s')
{
n=7;
}
if(a=='t'||a=='u'||a=='v')
{
n=8;
}
if(a=='w'||a=='x'||a=='y'||a=='z')
{
n=9;
}
return n;
}
public int Timetime2()
{
if(a=='a'||a=='d'||a=='g'||a=='j'||a=='m'||a=='p'||a=='t'||a=='w')
{
flag=1;
}
if(a=='b'||a=='e'||a=='h'||a=='k'||a=='n'||a=='q'||a=='u'||a=='x')
{
flag=2;
}
if(a=='c'||a=='f'||a=='i'||a=='l'||a=='o'||a=='r'||a=='v'||a=='y')
{
flag=3;
}
if(a=='s'||a=='z')
{
flag=4;
}
return flag;
}
}