早上弄了一道求高精度冪的演算法,偷懶用了內部類,總覺得過意不去,所以今天重新做了一道演算法題,做完心裡舒服好多。
題目如下:
企業喜歡用容易被記住的電話號碼。讓電話號碼容易被記住的一個辦法是將它寫成一個容易記住的單詞或者短語。例如,你需要給滑鐵盧大學打電話時,可以撥打TUT-GLOP。有時,只將電話號碼中部分數字拼字成單詞。當你晚上回到酒店,可以通過撥打310-GINO來向Gino's訂一份pizza。讓電話號碼容易被記住的另一個辦法是以一種好記的方式對號碼的數字進行分組。通過撥打必勝客的“三個十”號碼3-10-10-10,你可以從他們那裡訂pizza。
輸入的格式是,第一行是一個正整數,指定電話號碼薄中號碼的數量(最多100000)。餘下的每行是一個電話號碼。每個電話號碼由數字,大寫字母(除了Q和Z)以及串連符組成。每個電話號碼中只會剛好有7個數字或者字母。
Output
對於每個出現重複的號碼產生一行輸出,輸出是號碼的標準格式緊跟一個空格然後是它的重複次數。如果存在多個重複的號碼,則按照號碼的字典升序輸出。如果輸入資料中沒有重複的號碼,輸出一行:
124873279ITS-EASY888-45673-10-10-10888-GLOPTUT-GLOP967-11-11310-GINOF101010888-1200-4-8-7-3-2-7-9-487-3279
487-3279 4888-4567 3310-1010 2967-1111 1310-4466 1888-1200 1
代碼有點亂有點羅嗦,歡迎拍磚
代碼:
import java.util.ArrayList;import java.util.Scanner;public class ThePhoneNum {public static void main(String args[]) {String[] tem = new String[8];//用來儲存格式化之後的電話號碼tem[3] = "-";//把電話號碼第四位固定為'-'ArrayList<String> list = new ArrayList<String>();//記錄輸入的不規範號碼ArrayList<String> memory = new ArrayList<String>();//用來記錄格式化之後的所有號碼Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();int[] count = new int[num]; //統計相同號碼的數量while ((num--) >= 0) {list.add(scanner.nextLine());}for (int i = 0; i < list.size(); i++) {String string = list.get(i);String[] temparray = string.split("-");//除去輸入的號碼中的所有"-"string = getStr(temparray);//把上行代碼得到的字串數組轉化成字串for (int j = 0; j < string.length(); j++) {String temString = string.substring(j, j + 1);if (j < 3) {if (isLetter(temString)) {//是否為字母tem[j] = toNum(temString);//把字母映射成數字} else {tem[j] = string.substring(j, j + 1);//數字不用映射}} else {if (isLetter(temString)) {tem[j + 1] = toNum(temString);} else {tem[j + 1] = string.substring(j, j + 1);}}}if (tem[1] != null) {String s = getStr(tem);//把經過轉換後的號碼加入到列表格儲存體起來if(memory.contains(s)){count[memory.indexOf(s)]++;//如果已經存在,則直接數量上加1}else{memory.add(s);}}}for(String s : memory){System.out.println(s + " "+ (count[memory.indexOf(s)]+1));//遍曆列表,輸出號碼}}private static String toNum(String temString) {// TODO Auto-generated method stubchar c = temString.charAt(0);String s = String.valueOf(c);switch (c) {case 'a':case 'b':case 'c':case 'A':case 'B':case 'C':s = "2";break;case 'd':case 'e':case 'f':case 'D':case 'E':case 'F':s = "3";break;case 'g':case 'h':case 'i':case 'G':case 'H':case 'I':s = "4";break;case 'j':case 'k':case 'l':case 'J':case 'K':case 'L':s = "5";break;case 'm':case 'n':case 'o':case 'M':case 'N':case 'O':s = "6";break;case 'p':case 'r':case 's':case 'P':case 'R':case 'S':s = "7";break;case 'T':case 'U':case 'V':case 't':case 'u':case 'v':s = "8";break;case 'w':case 'x':case 'y':case 'W':case 'X':case 'Y':s = "9";break;}return s;}static boolean isLetter(String s) {char c = s.charAt(0);if (c >= 65 && c <= 122) {return true;} else {return false;}}public static String getStr(String[] args){String str="";for(int i=0;i<args.length;i++){str+=(String)args[i];}return str;}}
作者:jason0539
微博:
部落格:(轉載請說明出處)