一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
bob www
7 7
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String str = in.next();//输入一串字符串 char pre_char = str.charAt(0); int result = get_number(pre_char); if (str.length() == 1) { result = get_number(str.charAt(0)); System.out.println(result); return; } for (int i = 1; i < str.length(); i++) { //先判断前后两个字符是否是同一个按键 char t = str.charAt(i); int samePlace = in_the_same_place(pre_char, t); if (samePlace == 1) { //在不同位置 int after_num = get_number(t); result = result + after_num; pre_char = t; } else {//在同一位置 int pre_num = get_number(pre_char); int after_num = get_number(t); result = result + after_num + 2; pre_char = t; } } System.out.println(result); } } public static int get_number(char c) { if (c == 'a' || c == 'd' || c == 'g' || c == 'j' || c == 'm' || c == 'p' || c == 't' || c == 'w') return 1; else if (c == 'b' || c == 'e' || c == 'h' || c == 'k' || c == 'n' || c == 'q' || c == 'u' || c == 'x') return 2; else if (c == 'c' || c == 'f' || c == 'i' || c == 'l' || c == 'o' || c == 'r' || c == 'v' || c == 'y') return 3; else if (c == 's' || c == 'z') return 4; else return -1; } /** * * @param c1 前一个字符 * @param c2 后一个字符 * @return */ public static int in_the_same_place(char c1, char c2) { //判断是否在同一个位置上 //同一位置 if ((c1 == 'a' || c1 == 'b' || c1 == 'c' ) && (c2 == 'a' || c2 == 'b' || c2 == 'c')) return -1; else if ((c1 == 'd' || c1 == 'e' || c1 == 'f') && (c2 == 'd' || c2 == 'e' || c2 == 'f')) return -1; else if ((c1 == 'g' || c1 == 'h' || c1 == 'i' ) && (c2 == 'g' || c2 == 'h' || c2 == 'i')) return -1; else if ((c1 == 'j' || c1 == 'k' || c1 == 'l') && (c2 == 'j' || c2 == 'k' || c2 == 'l')) return -1; else if ((c1 == 'm' || c1 == 'n' || c1 == 'o') && ( c2 == 'm' || c2 == 'n' || c2 == 'o')) return -1; else if ((c1 == 'p' || c1 == 'q' || c1 == 'r' || c1 == 's') && (c2 == 'p' || c2 == 'q' || c2 == 'r' || c2 == 's')) return -1; else if ((c1 == 't' || c1 == 'u' || c1 == 'v') && ( c2 == 't' || c2 == 'u' || c2 == 'v')) return -1; else if ((c1 == 'w' || c1 == 'x' || c1 == 'y' || c1 == 'z') && (c2 == 'w' || c2 == 'x' || c2 == 'y' || c2 == 'z')) return -1; else return 1;//在不同位置 } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static char[][] key = {{'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'}}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s; while ((s = br.readLine()) != null) { int re = 0; int[] xy = new int[2]; int t = -1; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); xy = Find(c); if (t == xy[0]) {//和上次的在一个按钮中 re += 2; } re += xy[1] + 1; t = xy[0];//记录 } System.out.println(re); } } private static int[] Find(char c) { int[] xy = new int[2]; for (int i = 0; i < key.length; i++) { for (int j = 0; j < key[i].length; j++) { if (key[i][j] == c) { xy[0] = i; xy[1] = j; } } } return xy; } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s = sc.next().trim(); int num = getPushNum(s); System.out.println(num); } sc.close(); } private static int getPushNum(String s){ if(s == null || s.length() == 0) return 0; int[] group = new int[]{ 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6,6, 7,7,7, 8,8,8,8}; int[] time = new int[]{1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3,4, 1,2,3, 1,2,3,4}; if(s.length() == 1){ return time[s.charAt(0) - 'a']; } int res = 0; for(int i = 1; i < s.length(); i++){ int pre = s.charAt(i - 1) - 'a'; int cur = s.charAt(i) - 'a'; if(i == 1) res += time[pre]; if(group[pre] == group[cur]){ res += 2; } res += time[cur]; } return res; } }
//此方法思路为,创建String数组把按键枚举出来,利用String.indexOf() //构造方法计算时间和判断是否在同一按键上 import java.util.Scanner; public class Main{ //枚举按键,装入数组 public static String[] str = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ char[] ch = sc.nextLine().toCharArray(); //接收键盘输入 int times = cal(ch[0]); //用tims接收计算第一个字符所需时间段 for(int i=1;i<ch.length;i++){ //从第二个字符开始计算时间段 if(judge(ch[i-1],ch[i]) > 0){ //判断连续两个字符是否在同一按键上 times+=2; //同一按键则时间段加2 } times =cal(ch[i])+times; //计算字符所需时间段 } System.out.println(times); //打印最终结果 } } //创建cal()方法,计算按char c按键所需时间,返回index+1为按键所需时间段 public static int cal(char c){ int index = -1; for(int i=0;i<str.length;i++){ index = str[i].indexOf(c); if(index != -1){ return index+1; } } return 0; } //判断字符char a和字符char b是否在同一按键上,是则返回1,否则返回-1 public static int judge(char a,char b){ int i=0,j=0; //用i记录a字符的按键位置,j记录b字符的按键位置 for (; i < str.length; i++) { if(str[i].indexOf(a) != -1){ break; } } for (; j < str.length; j++) { if(str[j].indexOf(b) != -1){ break; } } if(i==j){ //判断a字符和b字符是否在同一按键上 return 1; } return -1; } }
import java.util.Objects; import java.util.Scanner; /** * Created by fhqplzj on 17-1-25 at 下午11:17. */ public class My3 { private static final String positions = "22233344455566677778889999"; private static final int[] values = new int[]{ 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4 }; private static int process(String s) { Objects.requireNonNull(s); s = s.toLowerCase(); int n = s.length(); if (n == 0) { return 0; } int result = values[s.charAt(0) - 'a']; for (int i = 1; i < n; i++) { if (positions.charAt(s.charAt(i - 1) - 'a') == positions.charAt(s.charAt(i) - 'a')) { result += 2; } result += values[s.charAt(i) - 'a']; } return result; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String s = scanner.nextLine(); System.out.println(process(s)); } } }