java —— 笨小猴
阿新 • • 發佈:2021-01-09
java —— 笨小猴
題目詳情
笨小猴的詞彙量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選
對的機率非常大!這種方法的具體描述如下:
假設maxn是單詞中出現次數最多的字母的出現次數,minn是單詞中出現次數最少的字母的出現次數,如果maxn-minn是一個質數,那
麼笨小猴就認為這是個Lucky Word,這樣的單詞很可能就是正確的答案。
輸入格式:
| 輸入只有一行,是一個單詞,其中只可能出現小寫字母,並且長度小於100。 |
輸出格式:
| 輸出共兩行,第一行是一個字串,假設輸入的的單詞是Lucky Word,那麼輸出“Lucky Word”,否則輸出“No Answer”; 第二行是一個整數,如果輸入單詞是Lucky Word,輸出maxn-minn的值,否則輸出0。 |
程式碼如下:
方法一:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); // 從鍵盤輸入一個字串 char[] ch = str.toCharArray(); // 把字串轉換為字元陣列 int[] a = new int[100]; // 因為最多有100個字母,用於儲存str中每個位置字母的個數 int maxn = 0, minn = 100; // 因為當100字母都是相同的則最小就為100 for (int i = 0; i < ch.length; i ++){//找出每個位置字母在整個字串中相同字母的個數 int num = 0; for (int j = 0; j < ch.length; j ++){ if (ch[j] == ch[i]){ num ++; } } a[i] = num; } for (int i = 0; i < ch.length; i ++){ // 根據比較大小來判斷陣列a中誰最大誰最小 if (maxn < a[i]){ maxn = a[i]; } if (minn > a[i]){ minn = a[i]; } } if (Prime(maxn , minn) == true){ System.out.println("Lucky Word"); System.out.println(maxn - minn); } else { System.out.println("No Answer"); System.out.println("0"); } } public static boolean Prime(int a, int b){ // 自定義一個方法判斷是不是質數 if (a - b < 2) return false; // 利用Math.sqrt(double)將a-b強制轉換為duoble型 for (int i = 2; i <= Math.sqrt((double) (a - b)); i ++){ if ((a - b) % i == 0){ return false; } } return true; } }
方法二:(提供者:Jplusztx)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); String str = stdIn.next(); // 從鍵盤輸入字串 int[] letters = new int[26];//因為只有26個字母,所以開闢大小為26的空間 int maxIndex = 0, minIndex = 0; for (int i = 0; i < str.length(); i++) { // .length() 獲取字串長度 int index = str.charAt(i) - 'a'; // 獲取str字串指定處i的字元,並減掉 'a',得到的數範圍是[0,25] letters[index]++; // if (letters[index] > letters[maxIndex]) maxIndex = index; //字母必須是在單詞中出現過,才能被記錄,所以此處加上letters[index] == 0條件 if (letters[minIndex] == 0 || letters[index] < letters[minIndex]) minIndex = index; } if (isPrime(letters[maxIndex] - letters[minIndex])){ System.out.println("Lucky Word"); System.out.println(letters[maxIndex] - letters[minIndex]); }else { System.out.println("No Answer"); System.out.println(0); } } public static boolean isPrime(int n){ // 判斷是不是質數 for (int i = 2; i <= Math.sqrt(n); i++) { if (n % i == 0) return false; } return n > 1; // return n > 1返回值是boolean值,同時考慮了 n = 0 或 1 的情況 } }
int index = str.charAt(i) - 'a'; // 獲取str字串指定處i的字元,並減掉 'a',得到的數範圍是[0,25]
letters[index]++;
此處利用了 字串名.charAt() 獲取字串指定位置的字母,並且此處全為小寫字母,因此減去 ’ a ’ 會得到一個0~25之間的數,從而letter[index] 再進行累加,比如letters[0]就代表a出現的次數,所以我們只用統計陣列letter 的下標就可以間接的統計某一個字母出現的次數。
字串名.charAt(): 返回指定處的字元。