复习C++--分治算法--找出假币
2014-03-17 11:12
369 查看
题目:真币的重量相等,假币的重量比假币轻,只有一个假币
#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("请输入银币的总的个数:\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 ; }
相关文章推荐
- 一段代码对C++的理解
- 构造函数语意学和Data语意学
- 【坐在马桶上看算法】算法5:解密回文——栈
- C语言单链表常见操作
- c++中的.和->区别
- C语言接口与实现创建可重用软件的技术读书笔记(6)---再谈内存管理
- C++11 中值得关注的几大变化(详解)
- C++11中值得关注的几大变化
- The Biggest Changes in C++11 (and Why You Should Care)
- C++中输入输出流getline()函数用法
- C++中输入输出流ifstream/ofstream用法总结
- 2013级C++第4周(春)项目——再和对象找感觉【项目4扩展1(选做)】
- 我推荐的一些C\C++书籍
- const用法总结(C++)
- C语言中的位域
- Java与C/C++有什么区别
- C++0x FAQ中文版:std::function 和 std::bind
- 2013级C++第4周(春)项目——再和对象找感觉【项目4扩展4(选做)】
- 【黑马程序员】C语言学习笔记之枚举(十三)
- 2013级C++第4周(春)项目——再和对象找感觉【项目4扩展3(选做)】