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