16.試題編號:J1-16 《中學生數學輔助學習系統》關鍵算法
(1)任務描述 由於中學數學是培養數學思維的基礎階段,為了讓學生打造一個堅實的數學基礎,A 學 校決定開發一個中學生數學輔助學習系統,通過完成趣味試題,采用游戲通關的方式,幫助 中學生初步掌握二元一次方程解簡單應用題的方法和步驟,並會列出二元一次方程解簡單的 應用題。
任務一:實現汽車與摩托問題的關鍵算法並繪制流程圖(30 分) 在一個停車場內,汽車、摩托車共停了 48 輛,其中每輛汽車有 4 個輪子,每輛摩托車 有 3 個輪子,這些車共有 172 個輪子,編程輸出停車場內有汽 車和摩托車的數量。 注意:用循環語句實現。
public class Teast1 { public static void main(String[] args) { //定義x為汽車數量,y為摩托車數量 int x=1; while (x<48) { if (x*4+(48-x)*3==172) { System.out.println("汽車的數量為:"+x); System.out.println("摩托車的數量為:"+(48-x)); } } } }
任務二:實現雞兔同籠問題的關鍵算法並繪制流程圖(30 分) 已知雞和兔的總數量為 n,總腿數為 m。輸入 n 和 m,依次輸出雞和兔的數目,如果無解, 則輸出“No answer”(不要引號)。注意:用循環語句實現。
import java.util.Scanner; public class Test2 { public static void main(String[] args) { int j,t; Scanner scanner=new Scanner(System.in); System.out.println("請輸入雞兔的總數:"); int n=scanner.nextInt(); System.out.println("請輸入雞兔的腿總數:"); int m=scanner.nextInt(); jito(n, m); } public static void jito(int n,int m) { int count=1;//雞 for ( count = 1; count <n; count++) { if ((count*2+(n-count)*4)==m) { System.out.println(count); System.out.println(n-count); }else { System.out.println("NO answer"); } } } }
任務三:實現合格電視機問題的關鍵算法並繪制流程圖(30 分) 某電視機廠每天生產電視 500 台,在質量評比中,每生產一台合格電視機記 5 分,每生 產一台不合格電視機扣 18 分。如果四天得了 9931 分,編程計算這四天生產的合格電視機的 台數,並輸出。 注意:用循環語句實現。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3
public class Test1 { public static void main(String[] args) { // 設合格的電視機台數為x int x = 1; // 不合格的電視機台數為4*500-x; for (x = 1; x < 2000; x++) { if (5 * x - (500 * 4 -x) * 18 == 9931) { System.out.println("合格的電視機台數為:" + x); } } } }
17.試題編號:J1-17《幾何圖形公式記憶系統》關鍵算法
(1)任務描述 由於幾何圖形的公式繁多且不好記憶,為了讓學生能快速並輕松的記住這些公式,A 學 校決定開發一個幾何圖形公式記憶系統,通過完成趣味試題,采用游戲通關的方式,幫助學 生輕松記住幾何圖形的公式。請完成以下任務。
任務一:實現圖形計算功能 1 關鍵算法並繪制流程圖(30 分) 輸入一個正方體的變長(a)計算盒子體積。 注意:結果保留兩位小數。
import java.util.Scanner; public class Task1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入正方體的邊長:"); int x = sc.nextInt(); volume(x); } /** * 輸入正方體的邊長,求正方體的體積 * * @return 正方體的體積 */ public static int volume(int x) { int v = 0; v = x * x * x; System.out.println("正方體的體積為:" + v); return v; } }
任務二:實現圖形計算功能 2 關鍵算法並繪制流程圖(30 分) 輸入三個數,分別是圓柱體底圓的高 h,半徑 r,請你編程求出該圓柱的表面積。 注意:PI = 3.14,輸出結果保留兩位小數。
import java.text.DecimalFormat; import java.util.Scanner; public class Task2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入圓柱體的半徑:"); double r = sc.nextDouble(); System.out.println("請輸入圓柱體的高:"); double h = sc.nextDouble(); volume(r, h); } /** * 鍵盤輸入圓柱體的高的半徑,求圓柱體的體積 * * @param r * 圓柱體的半徑 * @param h * 圓柱體的高 * @return 圓柱體的體積 */ public static double volume(double r, double h) { double v = 0; v = 3.14 * r * r * h; DecimalFormat df = new DecimalFormat("######0.00"); System.out.println("圓柱體的體積為:" + df.format(v)); return v; } }
任務三:實現圖形計算功能 3 關鍵算法並繪制流程圖(30 分) 輸入三個數,分別是三角形的三條邊 a,b,c,請你編程求出該三角形邊長。 注意:題目的輸入數據合法。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3 18.試題編號:
import java.util.Scanner; public class Task3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入三角形的邊長:"); double a = sc.nextDouble(); System.out.println("請輸入三角形的邊長:"); double b = sc.nextDouble(); System.out.println("請輸入三角形的邊長:"); double c = sc.nextDouble(); perimeter(a, b, c); } /** * 輸入三個數,分別是三角形的三條邊 a,b,c,請你編程求出該三角形周長。 * * @param a * 三角形的邊長 * @param b * 三角形的邊長 * @param c * 三角形的邊長 * @return 三角形的周長 */ public static double perimeter(double a, double b, double c) { double C = 0; if (a + b > c && a + c > b && b + c > a) { C = a + b + c; System.out.println("三角形的周長為:" + C); } else { System.out.println("您輸入的邊長不能構成三角形"); } return C; } }
J1-18《在線考試系統》關鍵算法
(1)任務描述 在線考試系統可以節約大量的紙張,也能大大減輕閱卷的工作量。越來越多的學校開始 引進在線考試系統。題庫是該系統的關鍵模塊,題庫中每道題均需提供參考答案,請完成以 下任務來充實在線考試系統的題庫。
任務一:實現細胞繁衍關鍵算法並繪制流程圖(30 分) 有一種細胞,從誕生第二天開始就能每天分裂出一個新的細胞,新的細胞在第二天又開 始繁衍。假設在第一天,有一個這樣的細胞,請問,在第 N 天晚上,細胞的數量是多少?輸 入一個整數 N(0 < N < 20),請編程求解第 N 天該細胞的數量。例如輸入 5,輸出答案為 32。 注意:使用循環或者遞歸完成。
import java.util.Scanner; /** * 求解第N天該細胞的數量 * * @author acer * */ public class Task1 { public static void main(String[] args) { int sum = 0; // 細胞的數量 int start = 1; // 第一天細胞的數量 System.out.println("請輸入天數: "); Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); if (N > 0 && N < 20) { for (int i = 0; i < N; i++) { start = start * 2; sum = start; } System.out.println(sum); } else { System.out.println("您輸入的整數有誤"); } } }
任務二:實現超級樓梯關鍵算法並繪制流程圖(30 分) 有一樓梯共 M 級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第 M 級, 共有多少種走法?輸入一個整數 M(1<=M<=40),表示樓梯的級數。例如: 上到第二層就有 2 種 第三層就 3 種 第四層就有 5 種 第五層就有 8 種 第六 就有 13 種 …… 注意:使用遞歸或循環實現。
import java.util.Scanner; public class Task2 { public static void main(String[] args) { System.out.println("請輸入一個整數: "); Scanner scanner = new Scanner(System.in); int M = scanner.nextInt(); if (M >= 1 && M <= 40) { int num = louCeng(M); System.out.println(num); } else { System.out.println("您輸入的整數有誤"); } } /** * 有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級, 共有多少種走法?輸入一個整數M(1<=M<=40),表示樓梯的級數 * * @param M * @return */ public static int louCeng(int M) { int f1 = 1; // 第一層 int f2 = 2; // 第二層 int sum = 0; for (int i = 1; i < M; i++) { if (i > 1) { sum = f2 + f1; f1 = f2; f2 = sum; } else { sum = 2; } } return sum; } }
任務三:實現手機短號計算關鍵算法並繪制流程圖(30 分) 大家都知道,手機號是一個 11 位長的數字串,同時作為學生,還可以申請加入校園網, 如果加入成功,你將另外擁有一個短號。假設所有的短號都是 6+手機號的后 5 位,比如號 碼為 13512345678 的手機,對應的短號就是 645678。
現在,如果給你一個 11 位長的手機號碼,你能找出對應的短號嗎?要求:輸入一個手 機號輸出對應的手機短號。
注意:使用遞歸實現或循環實現。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3
import java.util.Scanner; /** * 大家都知道,手機號是一個 11 位長的數字串,同時作為學生, 還可以申請加入校園網, 如果加入成功,你將另外擁有一個短號。 假設所有的短號都是 * 6+手機號的后 5 位 * * @author acer * */ public class Task3 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("請輸入手機號碼:"); String phone = s.next(); String shortPhone = 6 + phone.substring(phone.length() - 5, phone.length()); System.out.println("短號為:" + shortPhone); } }
19.試題編號:J1-19《OJ 系統》題庫關鍵算法
(1)任務描述 在線評判系統(簡稱 OJ,Online Judge)指在線用來評判程序的正確性、時間與效率空間 效率的評判系統。現需要為特定題目設計正確算法以便擴充題庫,請完成以下任務。
任務一:實現問題一關鍵算法並繪制流程圖(30 分) 編寫一個程序,該程序讀取一個字符串,然后輸出讀取的空格數目。 注意:輸入字符串的長度不超過 30 個字符(含空格)。
import java.util.Scanner; /* *截取空格 */ public class Task1 { public static void main(String[] args) { System.out.print("輸入字符串:"); Scanner s = new Scanner(System.in); System.out.print(fun(s.nextLine())); } public static int fun(String n) { int count = 0; for (int i = 0; i < n.length(); i++) { char sig = n.charAt(i); if (sig == ' ') count++; } return count; } }
任務二:實現問題二關鍵算法並繪制流程圖(30 分) 中國古代的《算經》記載了這樣一個問題:公雞 5 文錢 1 只,母雞 3 文錢 1 只,小雞 1 文錢 3 只,如果用 100 文錢買 100 只雞,那么公雞、母雞和小雞各應該買多少只呢?現在請 你編程求出所有的解,每個解輸出 3 個整數,打印在一行,用空格隔開,分別代表買的公雞、 母雞、小雞的數量。 注意:100 文錢要正好用完。請輸出所有的解,每個解占一行。
public class Task2 { public static void main(String[] args) { ji(); } /** * 公雞 5 文錢 1 只,母雞 3 文錢 1 只,小雞 1文錢 3 只, * 如果用 100 文錢買 100 只雞,那么公雞、母雞和小雞 * 各應該買多少只呢?現在請你編程求出所有的解,每個解 * 輸出 3 個整數,打印在一行,用空格隔開,分別代表買的 * 公雞、母雞、小雞的數量。 */ public static void ji() { int x = 0;// 公雞 int y = 0;// 母雞 int z = 0;// 小雞 for (int i = 0; i < 20; i++) { for (int j = 0; j < 33; j++) { for(int k =0; k<300; k++){ if (i*5 + j*3 + k/3 == 100 && i+j+k ==100) { x = i; y = j; z = (100-i-j); break; } } } } System.out.println("公雞有:"+x+"只"); System.out.println("母雞有:"+y+"只"); System.out.println("小雞有:"+z+"只"); } }
任務三:實現問題三關鍵算法並繪制流程圖(30 分) 有一天愛因斯坦給他的朋友出了一個題目,有一個樓,其兩層之間有一個很長的階梯。 如果一個人每步上 2 階,最后剩 1 階;如果一個人每步上 3 階,最后剩 2 階;如果一個人每 步上 5 階,最后剩 4 階;如果一個人每步上 6 階,最后剩 5 階;如果一個人每步上 7 階,最 后剛好一階也不剩。問這個階梯至少有多少階呢? 注意:請編程求出最小的一個答案並輸出。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3 20.試題編號:
public class Task3 { public static void main(String[] args) { jieTi(); } /** * 有一個樓,其兩層之間有一個很長的階梯。 * 如果一個人每步上 2 階,最后剩 1 階; * 如果一個人每步上 3 階,最后剩 2 階; * 如果一個人每步上 5 階,最后剩 4 階; * 如果一個人每步上 6 階,最后剩 5 階; * 如果一個人每步上 7 階,最后剛好一階也不剩。 * 問這個階梯至少有多少階呢? */ public static void jieTi(){ int x =0; while(true){ x++; if(x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0){ break; } } System.out.println("有"+x+"階"); } }
J1-20《統計問題處理系統》關鍵算法
(1)任務描述 統計學是通過搜索、整理、分析、描述數據等手段,以達到推斷所測對象的本質,甚至 預測對象未來的一門綜合性科學。其中用到了大量的數學及其它學科的專業知識,它的使用 范圍幾乎覆蓋了社會科學和自然科學的各個領域。某公司設計出一款統計問題處理系統,系 統需要不斷進行樣本“訓練”,以完成復雜的統計功能。為實現該系統,請完成以下任務。
任務一:實現統計問題 1 關鍵算法並繪制流程圖(30 分) 輸出數組第 k 大的數。 說明:首先輸入一個整數 n,代表數組的長度,隨后輸入 n 個數,代表數組的元素,最 后輸入一個整數 k,你需要輸出這 n 個數中第 k 大的數(0<k<=n)。 例如輸入: 5 5 3 1 2 4 3 輸出這 5 個數中第 3 大的數:
3 注意:使用數組完成。
import java.util.Scanner; public class Task1 { /** * @param args */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("請輸入數組長度:"); int n=sc.nextInt(); int[] arr=new int [n]; System.out.println("請輸入"+n+"個數:"); for(int i=0;i<arr.length;i++){ arr[i]=sc.nextInt(); } int num=maoPaoSort(arr); System.out.println(num); } /** * 輸出數組第 k 大的數 * @param arr * @return */ public static int maoPaoSort(int [] arr){ for(int i=0;i<arr.length-1;i++){ for (int j = 0; j < arr.length-i-1; j++) { if(arr[j]<arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } Scanner sca=new Scanner(System.in); System.out.println("請輸入要輸出第幾大的數:"); int a = sca.nextInt(); for(int i=0;i<arr.length;i++){ if(a-1==i){ int c = arr[i]; return c; } } return 0; } }
任務二:實現統計問題 2 關鍵算法並繪制流程圖(30 分) 統計給定的 n 個數中,負數、零和正數的個數。對於每組輸入數據,輸出一行 a,b 和 c, 分別表示給定的數據中負數、零和正數的個數。首先輸入一個數 n,代表有需要統計的有 n 個數,然后輸入 n 個數。
例如輸入:
5
1 2 3 0 -4
輸出: 1 1 3 注意:使用數組和判斷語句完成。
/** * 統計給定的 n 個數中,負數、零和正數的個數。對於每組輸入數據,輸出一行 a,b 和 c, 分別表示給定的數據中負數、零和正數的個數。首先輸入一個數 * n,代表有需要統計的有 n 個數,然后輸入 n 個數 * * @author * */ public class Task2 { public static void main(String[] args) { int[] arr = { 1, 2, 3, 0, -4 }; int zero = 0; int zheng = 0; int fu = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] == 0) { zero++; } else if (arr[i] > 0) { zheng++; } else { fu++; } } System.out.println(fu + "," + zero + "," + zheng); } }
任務三:實現統計問題 3 關鍵算法並繪制流程圖(30 分) 幸運數是波蘭數學家烏拉姆命名的。它采用與生成素數類似的“篩法”生成。 首先從 1 開始寫出自然數 1,2,3,4,5,6,....。1 就是第一個幸運數。我們從 2 這個數開 始。把所有序號能被 2 整除的項刪除,變為:1 _ 3 _ 5 _ 7 _ 9 ....把它們縮緊,重新記 序,為:1 3 5 7 9 .... 。這時,3 為第 2 個幸運數,然后把所有能被 3 整除的序號位置 的數刪去。注意,是序號位置,不是那個數本身能否被3整除!! 刪除的應該是5,11, 17, ...。 此時 7 為第 3 個幸運數,然后再刪去序號位置能被 7 整除的(19,39,...) ,最后剩下的序列 類似:1, 3, 7, 9, 13, 15, 21, 25……。 注意:請你根據幸運數的生成規則,編寫程序打印 100 以內的幸運數。輸出占一行,每 個數字后面輸出一個空格。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3
import java.util.LinkedList; /** * 請你根據幸運數的生成規則,編寫程序打印 100 以內的幸運數。輸出占一行,每 * 個數字后面輸出一個空格 * * */ public class Tastk3 { public static void main(String[] args) { LinkedList<Integer> arr = new LinkedList<Integer>(); for (int i = 1; i <= 100; i++) { arr.add(i); } int delIndex = 2; int i = 1; while (i < 3) { for (int j = arr.size() - 1; j >= 1; j--) { if ((j + 1) % delIndex == 0) { arr.remove(j); } } i++; delIndex++; } System.out.println(arr); } }