java算法

您所在的位置:网站首页 找硬币算法 java算法

java算法

#java算法| 来源: 网络整理| 查看: 265

概念

分治算法的基本思想是将一个大的复杂的问题分解成多个小的、容易解决的问题,通过解决这些小问题进而解决这个大问题。

使用分治算法需要待求解问题能够简化为若干个小规模的相同的问题,通过逐步划分,达到一个易于求解的阶段,而直接进行求解,在程序中可以使用递归方法来进行求解。

哈哈,说起来很抽象,举个例子就好理解了。

一个袋子里有n个硬币,其中一枚是假币,并且假币和真币一模一样,仅凭肉眼无法区分,仅知道假币比真币轻一些,请问如何查找到假币?

分治算法:

我们可以这样做:

将这n个硬币分成两等份,然后放到天平的两端,则假币在较轻的那一端;

然后将较轻的那一端的硬币再分成2等份,然后再放到天平的两端进行比较,假币还是在较轻的那一段;

直到最后只剩下两个硬币了,分别放到天平的两端,轻的哪一个就是假币。

 

当然,最后也可能剩下3个硬币,我们可以将这3个硬币中任意拿出来一个,然后将剩下的两个放到天平的两端,如果天平是平的,则说明拿出来的那个硬币就是假币;

如果天平不是平的,则轻的那一端是假币。

java编程 package divide_algorithm; import java.util.Scanner; /** * 分治算法找假币 */ public class FalseCoin { public static int find_false(int[] a, int low, int high) { int i = 0; //作为遍历的计数器 int re = 0; //re作为返回值 int sum1, sum2, sum3; //三个用来累加的变量 sum1 = sum2 = sum3 = 0; if (low + 1 == high) //当遍历到最后两个元素的时候 { if (a[low] < a[high]) { re = low; return re; } else { re = high; return re; } } if ((high - low + 1) % 2 == 0) //当长度为偶数的时候 { for (i = low; i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3