Java分治算法之求假币所在的位置代码
2021/5/23 20:25:31
本文主要是介绍Java分治算法之求假币所在的位置代码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java分治算法之求假币所在的位置代码
程序代码
废话不多说了,直接看代码
import java.util.ArrayList; import java.util.Scanner; /** * @description: 分治算法寻找假币 * @author: K先生 * @date: 2021-05-22 13:12 */ public class FalseCoin { static final int MAXNUM = 30; //(int[] coin, int low, int high):第一个参数主函数定义的数组 第二个参数数组被分析的数据的开始索引 第二个参数数组被分析的数据结束索引 private static int FalseCoin(int[] coin, int low, int high) { //定义三个变量 sum1用来存放前一段内容 sum2用来存放后一段内容和 sum3用来存放中间值的和 int sum1 = 0, sum2 = 0, sum3 = 0; //定义返回值变量 int re = 0; //当前半段或者后半段的数据为2个的时候,进行判断单独判断(例如:n=5或n=3) if ( low+1 == high ) { //如果2个数据前面的小于后面的,则返回前面的数据 if ( coin[low] < coin[high] ) { re = low+1;//方便用户查看 return re; } else {//如果2个数据前面的大于后面的,则返回后面的数据 re = high+1; return re; } } //low和high用来判断剩余的数据是偶数还是奇数进行再分类 if ( (high-low+1)%2 == 0 ) {//如果n是偶数 //前半段的数据 for ( int i = low; i <= low+(high-low)/2; i++ ) { sum1 = sum1 + coin[i]; } //后半段的数据 for ( int i = low+(high-low)/2+1; i <= high; i++ ) { sum2 = sum2 + coin[i]; } //开始分流 if ( sum1 > sum2 ) { re = FalseCoin(coin, low+(high-low)/2+1, high); return re; } else if ( sum2 > sum1 ){//sum2 > sum1 re = FalseCoin(coin, low, low+(high-low)/2); return re; } else if(sum2==sum1){//用户输入错误 return 0; } } else {//如果是奇数 //前半段,除去中间的一个硬币 for ( int i = low; i <= low+(high-low)/2-1; i++ ) { sum1 = sum1 + coin[i]; } //后半段,除去中间的一个硬币 for ( int i = low+(high-low)/2+1; i <= high;i++ ) { sum2 = sum2 + coin[i]; } sum3 = coin[low+(high-low)/2]; if ( sum1 > sum2 ) { //利用递归再次调用函数进行循环分类,把前半段的数组中的数据索引返回 re = FalseCoin(coin, low+(high-low)/2+1, high); return re; } else if ( sum2 > sum1 ){ //利用递归再次调用函数进行循环分类,把后半段的数组中的数据索引返回 re = FalseCoin(coin, low, low+(high-low)/2-1); return re; } if ( sum1+sum3 == sum2+sum3 ) { //直接取中间的值,+1展示给用户看,因为数组的索引是从0开始的 re = low+(high-low)/2+1; return re; } } return re; } public static void main(String[] args) { //定义用户输入的数组长度 int[] coin = new int[MAXNUM]; System.out.println("分治算法求假币问题: "); System.out.println("请输入硬币总的个数: "); Scanner in = new Scanner(System.in); //定义用户输入的的硬币个数 int n = in.nextInt(); System.out.println("请输入所有硬币权值: "); for ( int i = 0; i < n; i++ ) { //输入硬币的质量大小,其中一个为质量较轻的数据 coin[i] = in.nextInt(); } //调用算法函数进行判断,第三个参数为数组的指针 int position = FalseCoin(coin, 0, n-1); //输出假币的位置 System.out.println("假币在 " + position + "个位置 "); } }
希望朋友们多多支持!!!
这篇关于Java分治算法之求假币所在的位置代码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南