题目:真币的重量相等,假币的重量比假币轻,只有一个假币
#include <iostream>
using namespace std;
#define MAXNUM 100
int getFalseCoin(int coin[],int start,int end){
//出口
if(end-start==1){
return coin[start]>coin[end]?end:start;
}
int leftWeight=0,rightWeight=0;
//如果数量是奇数
if((end-start)%2==0){
//左边的总值为从start加到end/2-1。右边的总值为end/2到end-1
for(int i=start;i<end/2;i++) leftWeight+=coin[i];
for(int j=end/2;j<end;j++) rightWeight+=coin[j];
//如果左边总值==右边总值 返回 end
if(leftWeight==rightWeight) return end;
//否则调用getFalseCoin(coin,start,end-1);
else getFalseCoin(coin,start,end-1);
}else{
//如果数量是偶数
//如果左边总值小于:getFalseCoin(coin,start,end/2)
for(int i=start;i<=end/2;i++) leftWeight+=coin[i];
for(int j=end/2+1;j<=end;j++) rightWeight+=coin[j];
if(leftWeight<rightWeight) getFalseCoin(coin,start,end/2);
//否则:getFalseCoin(coin,end/2+1,end)
else getFalseCoin(coin,end/2+1,end);
}
}
void main(){
int coin[MAXNUM];
int k;
printf("请输

该博客介绍了一种使用C++编程语言实现的分治算法来找出一组银币中唯一较轻的假币的方法。通过递归地比较左右两部分银币的重量,确定假币所在的区域,直到找到假币的索引。
最低0.47元/天 解锁文章





