java算法题训练

📅 2026/7/27 7:21:33
java算法题训练
7.1public class shuzu1{ public static void main(String[] main ){ //1.定义数组 int[] arr{12,34,12445,1,2,23,422,2,2,34,45}; int val2; int slow0; int fast0; while (fastarr.length){ if(arr[fast]val){ //相等 fast; }else{ arr[slow]arr[fast]; slow; fast; } } for (int i 0; i slow; i) { System.out.print(arr[i] ); } } }7.2红包业务问题import java.util.Random; public class shuzu1{ public static void main(String[] main ){ //红包总额M红包个数N现有N个人来抽红包打印每个人领的红包金额每个人领的都是随机打印每个人领的 //1.定义变量表示红包的总和 int money4; int n5; if(moneyn){ System.out.println(红包金额不够请充值。); }else{ Random r new Random(); for (int i 1; i n - 1; i) { //money int mymoney r.nextInt(money - (n - i)) 1;//预留 //从总额中减去当前抽取到的钱 money money - mymoney; System.out.println(第 i 个人抽到 mymoney 分); } System.out.println(第 n 个人抽到 money 分); } } }7.3两个数组合并取中位数的问题麻烦的方法//二路归并法 int [] arr1{1,3,5,7,9}; int [] arr2{2,4}; double numberfindMedian(arr1, arr2); } public static double findMedian(int [] arr1,int [] arr2) { //定义一个大数组 int [] arrnew int[arr1.lengtharr2.length]; int index0; for(int i0;iarr.length;i){ arr[i]arr1[index]; } for(int i0;iarr.length;i){ arr[iarr1.length]arr2[index]; index; } return 0;public class shuzu1 { public static void main(String[] main) { //二路归并法 int[] arr1 {1, 3, 5, 7, 9}; int[] arr2 {2, 4}; double number findMedian(arr1, arr2); // 打印最终结果 System.out.println(\n中位数 number); } public static double findMedian(int[] arr1, int[] arr2) { //定义合并后的大数组 int[] arr new int[arr1.length arr2.length]; int index1 0; int index2 0; for (int i 0; i arr.length; i) { // arr1 遍历完毕直接取 arr2 剩余元素 if (index1 arr1.length) { arr[i] arr2[index2]; index2; continue; } // arr2 遍历完毕直接取 arr1 剩余元素 if (index2 arr2.length) { arr[i] arr1[index1]; index1; continue; } // 谁小就放入结果数组 if (arr1[index1] arr2[index2]) { arr[i] arr1[index1]; index1; } else { arr[i] arr2[index2]; index2; } } // ✅ 先打印合并后的数组必须放在 return 之前 System.out.print(合并后数组); for (int i 0; i arr.length; i) { System.out.print(arr[i] ); } // 再计算并返回中位数 if (arr.length % 2 0) { int num1 arr[arr.length / 2]; int num2 arr[arr.length / 2 - 1]; return (num1 num2) / 2.0; } else { int num arr[arr.length / 2]; return num / 1.0; } } }7.4多数据统计7.5接雨水1.柱子的高度图2.求剩下能接住的雨水的个数算法动态规划DPclass Solution { public int trap(int[] height) { int n height.length; if (n 0) { return 0; } int[] leftMax new int[n]; leftMax[0] height[0]; for (int i 1; i n; i) { leftMax[i] Math.max(leftMax[i - 1], height[i]); } int[] rightMax new int[n]; rightMax[n - 1] height[n - 1]; for (int i n - 2; i 0; --i) { rightMax[i] Math.max(rightMax[i 1], height[i]); } int ans 0; for (int i 0; i n; i) { ans Math.min(leftMax[i], rightMax[i]) - height[i]; } return ans; } }7.6大乐透package com.itszu.learn; import java.util.Random; import java.util.Scanner; public class Test6 { public static void main(String[] args){ //1.random随机生成代码 //2.scanner模拟购买彩票 //3.判断中奖 int [] lotteryNumbercreateLotteryNumber(); printLotteryNumber(lotteryNumber); int [] my buyLotteryNumber(); printLotteryNumber(my); getWinnerNumber(lotteryNumber,my); } public static int[] createLotteryNumber(){ int [] arrnew int[7]; //前区 Random rnew Random(); for (int i 0; i 5; ) { int number r.nextInt(36) 1; // 生成 1~36 的整数 boolean flag contains(number,arr,0,4);//在前5个数据中 if(!flag){//如果数组里面没有这个数那么存入数组里面 arr[i]number; i; } } //后区 for (int i 0; i 2; ) { int number r.nextInt(12)1;//在后两个数据中判断 boolean flagcontains(number,arr,5,6); //判断 if(!flag){ arr[i5]number; i; } } return arr; } //写方法时候可以不断改进 public static boolean contains(int number,int [] arr,int start,int end){ for (int i start; i end; i) { if(arr[i]number){ return true; } } return false; } public static int[] buyLotteryNumber(){ //1.创建一个数组 int [] arr new int[7]; //2.利用scanner模拟购买彩票1-35 Scanner scnew Scanner (System.in); for (int i 0; i 5; ) { System.out.println(请输入第(i1)个彩票号码); int numbersc.nextInt(); //判断范围(解决方法异常) if(number1 || number35){ System.out.println(当前号码不在范围中请重新选择); continue; } //判断是否唯一 boolean flagcontains(number,arr,0,4); if(flag){ System.out.println(当前号码存在请重新选择); } arr[i]number; i; } for (int i 0; i 2;) { System.out.println(请输入第(i1)个彩票号码); int numbersc.nextInt(); //判断范围(解决方法异常) if(number1 || number12){ System.out.println(当前号码不在范围中请重新选择); continue; } //判断是否唯一 boolean flagcontains(number,arr,5,6); if(flag){ System.out.println(当前号码存在请重新选择); continue; } arr[i5]number; i; } return arr; } public static void printLotteryNumber(int [] arr){ for (int i 0; i arr.length; i) { if(iarr.length-1){ System.out.print(arr[i]); System.out.println(); }else{ System.out.print(arr[i]); } } } //判断彩票arr1:中奖号码 arr2:购买的彩票 public static void getWinnerNumber(int [] arr1,int [] arr2){ int count0; for(int i0;i5;i){ //arr2[i]到arr1[i]里面存在 boolean flagcontains(arr2[i],arr1,0,4); //如果当前的数字已存在表示当前中了一个号码 if(flag){ count; } } int count20; for(int i5;i7;i){ boolean flagcontains(arr2[i],arr1,5,6); if(flag){ count2; } } System.out.println(红球count); System.out.println(蓝球count2); String result; if (count 5 count2 2) { result 一等奖; } else if (count 5 count2 1) { result 二等奖; } else if (count 5 count2 0) { result 三等奖; } else if (count 4 count2 2) { result 四等奖; } else if (count 4 count2 1) { result 五等奖; } else if ((count 3 count2 2) || (count 4 count2 0)) { result 六等奖; } else if ((count 3 count2 1) || (count 2 count2 2)) { result 七等奖; } else if ((count 3 count2 0) || (count 1 count2 2) || (count 2 count2 1) || (count 0 count2 2)) { result 八等奖; } else { result 很遗憾未中奖; } System.out.println(中奖结果 result); } public static void getcount(int[] arr1,int[] arr2,int start,int end){ int count0; } }