前兩天一個小伙伴問了我一個數組的練習題,我一看思路很清晰,就是打印素數加了個數組。沒想到寫的時候啪啪打臉,終究還是沒逃過眼高手低。本來不打算發出來了,因為發出來愈發顯得我很菜,最后還是打算分享出來,一來想着剛學習數組的小伙伴看到了多少會有點收獲,再有就是總結了兩句話。
題目內容:
我們認為2是第一個素數, 3是第二個素數, 5是第三個素數,依次類推。
現在,給定兩個整數n和m, 0<n<=m<=200, 你的程序要計算第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。
注意,是第n個素數到第m個素數之間的所有的素數,並不是n和m之間的所有的素數。
輸入格式:
2 5
兩個整數,第一個表示n,第二個表示m。
一個整數,示第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。
輸入樣例:2 4
輸出樣例:15
這里簡單幫基礎不是很好的小伙伴分析一下思路,如果會的小伙伴可以直接跳過去自己寫一下或者直接去看下面的代碼,當然代碼上也盡量寫上了詳細的注釋。
首先,素數什么的就不在這兒解釋了;題上要求程序要計算第n個到第m個素數之間的所有素數之和,因為m、n是未知的,所以我們得先把200以內的素數全部挑出來;人家下面說了m、n是要輸入的,所以你挑出來的素數不能直接打印出來,需要先存到數組里,那么我們就得定義一個數組方便存取素數。好了,上代碼。
1 package test; 2 3 import java.util.Scanner; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 //獲取控制台輸入的內容 這里如果不會就先去學習一下鍵盤錄入 9 Scanner sc = new Scanner(System.in); 10 11 //加一個輸入提示 12 System.out.println("請輸入m和n的值:(0<n<=m<=200)"); 13 int n = sc.nextInt();//鍵盤錄入 14 int m = sc.nextInt();// n和m是題中給的范圍條件 15 16 //判斷一下輸入的m、n是否符合條件 17 if (n <= 0 || n > m || m > 200) { 18 System.out.println("輸入格式有誤!"); 19 } 20 21 int sum = 0;// 最后的和 22 int a[] = new int[200];// 定義一個數組用來存放素數 23 int x = 0;// 將素數存到數組里需要的索引 24 25 for (int i = 2; i <= 200; i++) { 26 boolean flag = true;// 弄一個標記,是素數標true,不是素數改成false 默認值為true 27 28 // 判斷第i個數是不是素數 29 for (int j = 2; j < i; j++) {// 拿i依次除以2、3、4、5一直除到比i小一的數 30 31 if (i % j == 0) {// 如果有一個能除進,就不是素數 32 flag = false;// 不是素數就給他標記成false 33 break; // 只要出現一次能除盡的情況就不是素數,直接跳出內循環,節省時間 34 } 35 } 36 37 if (flag) {// 沒有標上false就說明是素數 38 a[x] = i; // 符合了條件就給他放數組里面 39 x++;//每存入一個素數索引加一,以便下次存放 40 } 41 42 } 43 44 // 因為數組的索引是從0開始,題上要求的2是第一個素數所以需要給n和m都-1 45 for (int i = n - 1; i <= m - 1; i++) { 46 sum += a[i];// 從第n個素數一直加到第m個素數 47 } 48 System.out.println("第" + n + "個素數到第" + m + "個素數之間所有的素數之和為:" + sum); 49 50 sc.close();//關閉流,如果不關閉也不會報錯只會有警告 51 52 } 53 54 }
結果:
請輸入m和n的值:(0<n<=m<=200)
2
4
第2個素數到第4個素數之間所有的素數之和為:15
這個題其實不難,只不過對於剛學到這方面知識的小伙伴和像我這樣的菜雞來說需要注意兩個地方:
好了,一個基礎題用的時間竟然是我想象的兩倍,但是也反省了自己
第一:你真的可能比自己想象的還要菜。
第二:自己會做的東西也不一定能立馬做出來,很容易犯眼高手低的錯誤。
第三:不能輕視基礎。
第四:如果基礎真的扎實了,前幾條都是扯淡。