Java之手機鍵盤
阿新 • • 發佈:2019-02-13
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
tip:敲到手指發抖……-……
import java.util.Scanner; public class Main { public static int f(char a) { if(a >= 'a' && a <= 'c') return 2; else if(a >= 'd' && a <= 'f') return 3; else if(a >= 'g' && a <= 'i') return 4; else if(a >= 'j' && a <= 'l') return 5; else if(a >= 'm' && a <= 'o') return 6; else if(a >= 'p' && a <= 's') return 7; else if(a >= 't' && a <= 'v') return 8; else return 9; } public static int get_time(char a) { int flag = 0; if(a == 'a' || a == 'd' || a == 'g' || a == 'm' || a == 'p' || a == 't' || a == 'w' || a == 'j') flag = 1; else if(a == 'b' || a == 'e' || a == 'h' || a == 'k' || a == 'n' || a == 'q' || a == 'u' || a == 'x') flag = 2; else if(a == 'c' || a == 'f' || a == 'i' || a == 'l' || a == 'o' || a == 'r' || a == 'v' || a == 'y') flag = 3; else if(a == 's' || a == 'z') flag = 4; return flag; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String str = sc.nextLine(); char []a = str.toCharArray(); int sum = 0; for(int i = 0; i < str.length(); i++) { sum += get_time(a[i]); } for(int i = 1; i < str.length(); i++) { if(f(a[i]) == f(a[i - 1])) { sum += 2; } } System.out.println(sum); } sc.close(); } }