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); } }