?總結:幾個函數的使用
(1)? int num=Integer.parseInt(str[0]); //將第一個字符串轉成整形數,表示名字個數
(2)?String string1=str[i].toLowerCase(); //變小寫都
(3)? char ch[]=string1.toCharArray(); //將每一個字符串轉成相印的字符數組
(4)??String st=Integer.toString( num1[p]); //將int型轉換成字符串型
? (5) ? 算法層面:計算出每個名字字母出現的個數,排序后,直接按照排序后的計數進行計算就行了,計數最多的是26,一次遞減就行了
?
描述 | 給出一個名字,該名字有26個字符串組成,定義這個字符串的“漂亮度”是其所有字母“漂亮度”的總和。 |
---|---|
知識點 | 字符串 |
運行時間限制 | 0M |
內存限制 | 0 |
輸入 | 整數N,后續N個名字 N個字符串,每個表示一個名字 ? |
輸出 | 每個名稱可能的最大漂亮程度 |
樣例輸入 | 2 zhangsan lisi |
樣例輸出 | 192 101 |
個人電腦測試版本:
package huawei4; import java.util.Scanner; public class Beautiful { public static void main(String[] args){System.out.println("請輸入樣例:");Scanner scStr=new Scanner(System.in);String in=scStr.nextLine();String str[]=in.split(" "); //存起來,空格分割; int num=Integer.parseInt(str[0]); //將第一個字符串轉成整形數,表示名字個數int num1[]=new int[num]; //存放每一個名字的漂亮度for(int i=1;i<=num;i++) {int tmp[]=new int[26]; //存放每個名字26個字母分別出現的個數String string1=str[i].toLowerCase(); //變小寫都char ch[]=string1.toCharArray(); //將每一個字符串轉成相印的字符數組for(int j=0;j<str[i].length();j++){ // 統計個數int k=ch[j]-'a';if((k>=0)&&(k<=26)){tmp[k]++; //如果在這個范圍內加1; }}//冒泡對tmpint tmp2;for(int p=tmp.length-1;p>0;p--){for(int q=0;q<p;q++){if(tmp[q+1]<tmp[q]){tmp2=tmp[q];tmp[q]=tmp[q+1];tmp[q+1]=tmp2;}}}//不需要在計算每個字母了,直接遍歷字母個數for(int k=0;k<tmp.length;k++) { num1[i-1]=num1[i-1]+tmp[k]*(26+k-25); //如果在這個范圍內加1; }} StringBuffer tt=new StringBuffer();for(int p=0;p<num;p++){String st=Integer.toString( num1[p]); //將int型轉換成字符串型tt.append(st);if(p!=num-1)tt.append(" "); //空格,如果不是最后一個名字 } System.out.print(tt); // for(int p=0;p<num;p++){ // System.out.println(num1[p]); // } } }
華為在線OJ版本:
華為測試注意事項:
1、字符串輸入的時候一定要用next(),不要使用nextLine();區別是next()可以以空格和enter鍵當作 分界線
? ? ?試驗后發現next()方法是以換行或者空格符為分界線接收下一個String類型變量。?
2、輸出的時候多行輸出的時候換行輸出,不要在一行輸出,如果一定在一行輸出,考慮用print,不要用println
別人的說明:Java的使用Scanner的next()不要用nextline(),再將結果換行輸出,應該就可以了;頂,真的就是這個問題
package huawei4;import java.util.Scanner; public class Beautiful{ public static void main(String[] args){ Scanner scStr=new Scanner(System.in); int num=scStr.nextInt(); //名字個數 String name[]=new String[num]; //定義一個字符串數組for(int k=0;k<num;k++){ name[k]=scStr.next(); // } int num1[]=new int[num]; //存放每一個名字的漂亮度 for(int i=0;i<num;i++) { int tmp[]=new int[26]; //存放每個名字26個字母分別出現的個數 // String string1=str[i].toLowerCase(); //變小寫都 char ch[]=name[i].toCharArray(); //將每一個字符串轉成相印的字符數組 for(int j=0;j<name[i].length();j++){ // 統計個數 int k=0; if(ch[j]>='a'&&ch[j]<='z'){k=ch[j]-'a'; }elsek=ch[j]-'A'; if((k>=0)&&(k<=26)){ tmp[k]++; //如果在這個范圍內加1; } } //冒泡對tmp int tmp2; for(int p=tmp.length-1;p>0;p--){ for(int q=0;q<p;q++){ if(tmp[q+1]<tmp[q]){ tmp2=tmp[q]; tmp[q]=tmp[q+1]; tmp[q+1]=tmp2; } } } //不需要在計算每個字母了,直接遍歷字母個數 for(int k=0;k<tmp.length;k++) { num1[i]=num1[i]+tmp[k]*(26+k-25); //如果在這個范圍內加1; } } for(int p=0;p<num;p++){System.out.println(num1[p]);} } }
?