分治算法寻找硬币

原创 2016年08月29日 09:29:57

1,寻找假硬币

2,步骤:1 首先为每个硬币编号,然后可以将所有的硬币等分为两份,放在天平的两端;

            2 因为假硬币分量比较轻,因此天平较轻的一端一定包含假硬币

            3 再将较轻的一侧中的硬币等分为两部分,重述上方的做法。,

3,伪代码如下:

public static int FalseCoin(int coin[],int low,int high){
int i,sum1,sum2,sum3;
int re = 0;
sum1=sum2=sum3=0;
if(low+1==high){
if(coin[low]<coin[high]){
re = low+1;
return re;
}
else{
re = high+1;
return re;
}
}

if((high-low+1)%2 == 0){

for(i=low;i<=low+(high-low)/2;i++){
sum1 = sum1+coin[i];
}
for(i=low+(high-low)/2+1;i<=high;i++){
sum2=sum2+coin[i];
}
if(sum1<sum2){
re = FalseCoin(coin, low, low+(high-low)/2);
return re;
}
else if(sum1>sum2){
re = FalseCoin(coin, low+(high-low)/2, high);
return re;
}
else{

}
}
else{
for(i=low;i<=low+(high-low)/2-1;i++){
sum1 = sum1+coin[i];
}
for(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(sum1<sum2){
re = FalseCoin(coin, low, low+(high-low)/2-1);
return re;
}
else{

}
if(sum1+sum3==sum2+sum3){
re = low+(high-low)/2+1;
return re;
}
}
return 0;

}



版权声明:本文为博主原创文章,未经博主允许不得转载。

【经典算法】:关于硬币称重问题及编程实现

好吧,我承认我是被室友坑了,突然在寝室讨论起这个,从晚上9点多一直搞到了现在,才搞完+_+,不是彻底,但是搞定了大部分的问题问题1,4硬币称重问题 2,8硬币称重问题 3,12硬币称重问题传送门:...
  • qq_23100787
  • qq_23100787
  • 2015年09月21日 00:01
  • 1749

算法学习之枚举--称硬币

枚举就是逐个尝试,直到找出正确答案。下面通过一个称硬币问题继续学习枚举思想。 问题: 有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架...
  • qq_27474589
  • qq_27474589
  • 2017年08月19日 09:46
  • 217

[C/算法]N硬币问题/称硬币

  • 2010年08月27日 18:09
  • 18KB
  • 下载

分治算法经典例题 寻找假币

一个袋子里有若干硬币,其中一枚是假币,并且和假币和真币一模一样,目前只知道假币币真币轻一点。请问如何区别:利用分治 算法的思想:import java.util.Scanner;public clas...
  • qq_34649947
  • qq_34649947
  • 2017年06月11日 13:34
  • 577

利用分治算法——在真币中找出伪币

装有1 6个硬币的袋子。1 6个硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。我们要找出这个伪造的硬币。我们有一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否...
  • duyifei01
  • duyifei01
  • 2016年04月04日 20:23
  • 1294

分治算法基本思想和典型例题

分治算法基本思想和典型例题   1 算法思想 分而治之方法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以: 1) 把它分成两个或多个更小的问题; 2) 分别解决每个小问题...
  • u011520601
  • u011520601
  • 2014年05月03日 09:30
  • 348

算法学习_分治算法、动态规划

一.分治 1.基本思想:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。 2.实例: 2.1找出伪币 给你...
  • weixiaonvhuang
  • weixiaonvhuang
  • 2015年01月19日 21:41
  • 395

分治算法——假硬币寻找,硬币找零,众数问题

分治算法(dac),是对递归或者递推技术的一种具体运用。处理问题的过程中,我们有时的确分而且治了(线性时间选择,归并排序),但更多情况下,恐怕是一种分而不治的思想(假硬币寻找,众数问题)通过递归技术,...
  • Flanz_Hawk
  • Flanz_Hawk
  • 2017年12月23日 19:17
  • 44

004-寻找多数元素-归纳法-《算法设计技巧与分析》M.H.A学习笔记

含有n个元素的序列,多数元素指出现次数多于n/2的元素。
  • qq_18738333
  • qq_18738333
  • 2016年06月27日 16:29
  • 560

纯C语言:分治假币问题源码

#include #include int get_false_coin(int coin[],int low,int high) { int i,sum1=0,sum2=0,sum3=0; i...
  • u011131296
  • u011131296
  • 2014年01月03日 00:04
  • 8722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分治算法寻找硬币
举报原因:
原因补充:

(最多只允许输入30个字)