复习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
- 复习C++--分治算法--找出假币
- 分治算法经典例题 寻找假币
- 纯C语言:分治假币问题源码
- 找出假币
- 找出假币
- 复习一:分治算法
- 分治法找假币
- 分治法找假币
- 算法复习2--分治法
- poj 1013(找出假币)
- 算法题----称硬币: 2n(并不要求n是2的幂次方)个硬币,有两个硬币重量为m+1, m-1, 其余都是m 分治 O(lgn)找出假币
- 算法复习之分治算法_01
- 【C】分治算法
- 算法复习-递归与分治策略
- 算法复习--分治、减治、变治
- 算法复习--分治、减治、变治
- 算法复习2:递归与分治策略
- 找假币算法
- “都叫兽”背后的韩国文化
- 脚本之oracle 查看启动时间和运行时间
- linux负载检测命令
- 第一个Win32窗口程序
- MSSQL获取当前日期及格式
- 复习C++--分治算法--找出假币
- 一段代码对C++的理解
- 脚本之oracle查看核心进程
- C#利用Web Service实现短信发送
- 产品促销调查
- 个人推广APP的心得:有的放矢
- labview中波形图表的使用
- Redhat TCP 连接数修改
- libvirt