news 2026/4/16 19:46:17

【期末复习01】--算法题ProgramDesign

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【期末复习01】--算法题ProgramDesign

文章目录

  • 文章目录
    • 文章介绍
    • 项目结构
    • 案例Algorithm01
    • 案例Algorithm02
    • 案例Algorithm03
    • 案例Algorithm04
    • 案例Algorithm05

文章目录

文章介绍

项目结构

案例Algorithm01

案例Algorithm02

案例Algorithm03

案例Algorithm04

案例Algorithm05

文章介绍
期末复习重点案例(算法题)

项目结构

1.案例Algorithm01
要求:使用冒泡排序算法对数组a={9, 7, 4, 6, 3, 1,10},按由小到大的规律排序数组中的元素。

packageProgramDesign;publicclassAlgorithm01{publicstaticvoidmain(String[]args){// 待排序数组int[]a={9,7,4,6,3,1,10};System.out.println("排序前数组:");printArray(a);// 冒泡排序核心逻辑bubbleSort(a);System.out.println("排序后数组(从小到大):");printArray(a);}/** * 冒泡排序方法:对int数组进行从小到大排序 * @param arr 待排序的数组 */publicstaticvoidbubbleSort(int[]arr){intn=arr.length;booleanswapped;// 优化标志:判断本轮是否发生交换(无交换则数组已有序)// 外层循环:控制排序轮数(最多需要 n-1 轮,因为每轮确定1个最大元素的位置)for(inti=0;i<n-1;i++){swapped=false;// 初始化:本轮未发生交换// 内层循环:遍历未排序部分,比较相邻元素// 每轮结束后,最大元素已"冒泡"到末尾,下轮无需遍历已排序的末尾元素for(intj=0;j<n-1-i;j++){// 若当前元素 > 下一个元素,交换位置(保证从小到大)if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;swapped=true;// 标记本轮发生了交换}}// 优化:若本轮未发生交换,说明数组已有序,直接退出循环if(!swapped){break;}}}/** * 辅助方法:打印数组 * @param arr 要打印的数组 */publicstaticvoidprintArray(int[]arr){for(intnum:arr){System.out.print(num+" ");}System.out.println();}}

运行结果

2.案例Algorithm02
要求:输出100到300间所有能被7整除且不能被3整除的整数,每行输出5个。

packageProgramDesign;publicclassAlgorithm02{publicstaticvoidmain(String[]args){intcount=0;// 计数器:记录当前行已输出的数字个数// 遍历100到300(包含100和300)for(intnum=100;num<=300;num++){// 条件:能被7整除(num%7==0)且不能被3整除(num%3!=0)if(num%7==0&&num%3!=0){System.out.print(num+"\t");// 输出数字,用制表符分隔(排版整齐)count++;// 计数器自增// 每输出5个数字,换行(count是5的倍数时)if(count%5==0){System.out.println();}}}}}

运行结果

3.案例Algorithm03
要求:计算3到11之间(包括3和11)所有整数的阶乘和。

packageProgramDesign;publicclassAlgorithm03{publicstaticvoidmain(String[]args){longtotalSum=0;// 存储阶乘和(用long避免整数溢出,11! = 39916800,int足够,但long更稳妥)intstart=3;// 起始数intend=11;// 结束数System.out.println("计算 "+start+" 到 "+end+" 之间所有整数的阶乘和:");for(intnum=start;num<=end;num++){longfactorial=calculateFactorial(num);// 计算当前数的阶乘totalSum+=factorial;// 累加阶乘到总和// 打印中间过程(可选,便于验证)System.out.println(num+"! = "+factorial);}System.out.println("\n"+start+" 到 "+end+" 的阶乘和 = "+totalSum);}/** * 辅助方法:计算单个整数的阶乘(n!) * @param n 待计算阶乘的整数(此处n≥3,n≤11) * @return n的阶乘结果 */publicstaticlongcalculateFactorial(intn){longresult=1;// 阶乘初始值(1! = 1,0! = 1)// 循环计算:n! = n × (n-1) × ... × 1for(inti=1;i<=n;i++){result*=i;}returnresult;}}

运行结果

4.案例Algorithm04
要求:从键盘输入一个整数n,使用while设计程序计算从1到n的和。

/** * 计算1到n的累加和(while循环实现) */packageProgramDesign;importjava.util.Scanner;publicclassAlgorithm04{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intn=0;intsum=0;inti=1;// 仅校验正整数System.out.print("请输入一个正整数n:");while(true){if(scanner.hasNextInt()){n=scanner.nextInt();if(n>0)break;elseSystem.out.print("输入错误!请输入正整数:");}else{System.out.print("输入错误!请输入有效的整数:");scanner.next();}}// while循环累加(仅正整数)while(i<=n){sum+=i;i++;}System.out.println("1到"+n+"的累加和为:"+sum);scanner.close();}}

运行结果

5.案例Algorithm05
要求:从键盘输入一个4位整数n,计算各位数字的和。例如:n=3214,其各位数字和为3+2+1+4=10。

/** * 计算4位整数的各位数字之和 */packageProgramDesign;// 包声明必须在第一行有效语句位置importjava.util.Scanner;// 导入Scanner类,解决“找不到符号”问题publicclassAlgorithm05{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intn=0;// 步骤1:读取并校验4位整数(1000 ~ 9999)System.out.print("请输入一个4位整数:");while(true){// 校验输入是否为整数if(scanner.hasNextInt()){n=scanner.nextInt();// 校验是否为4位范围if(n>=1000&&n<=9999){break;// 输入合法,退出校验循环}else{System.out.print("输入错误!请输入1000-9999之间的4位整数:");}}else{System.out.print("输入错误!请输入有效的整数:");scanner.next();// 清空非法输入,避免死循环}}// 步骤2:核心逻辑——拆分各位数字并求和(while循环实现)inttemp=n;// 临时变量保存原数,避免修改nintdigitSum=0;// 存储各位数字和while(temp>0){intdigit=temp%10;// 取最后一位(个位)digitSum+=digit;// 累加当前位到和中temp=temp/10;// 去掉最后一位(整除10)}// 步骤3:输出结果System.out.println("4位整数 "+n+" 的各位数字之和为:"+digitSum);scanner.close();// 释放资源}}

运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!