复习C++--分治算法--找出假币

来源:互联网 发布:苹果6s强制锁定4g网络 编辑:程序博客网 时间:2024/06/08 15:01
题目:真币的重量相等,假币的重量比假币轻,只有一个假币
#include <iostream>using namespace std;#define  MAXNUM 100int 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-1for(int i=start;i<end/2;i++) leftWeight+=coin[i];for(int j=end/2;j<end;j++) rightWeight+=coin[j];  //如果左边总值==右边总值 返回 endif(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("请输入银币的总的个数:\n");cin>>k;cout<<"请依次输入银币的重量"<<endl;for(int i=0;i<k;i++){cin>>coin[i];}int n=getFalseCoin(coin,0,k-1);cout<<"银币最小的索引为:"<<n<<endl;return ;}

0 0
原创粉丝点击