算法实验报告(8枚硬币).doc_第1页
算法实验报告(8枚硬币).doc_第2页
算法实验报告(8枚硬币).doc_第3页
算法实验报告(8枚硬币).doc_第4页
算法实验报告(8枚硬币).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验名称减治法在组合问题中的应用8枚硬币问题 实验室实验目的或要求1. 实验题目 在8枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币。2.实验目的1)深刻理解并掌握减治法的设计思想并理解它与分治法的区别;2)提高应用减治法设计算法的技能。3)理解这样一个观点:建立正角的模型对于问题的求解是非常重要的。3. 实验要求1)设计减治算法实现8枚硬币问题;2)设计实验程序,考察用减治技术设计的算法是否高效;3)扩展算法,使之能处理n枚硬币中有一枚假币的问题。4. 实现提示假设用一个数组Bn表示硬币,元素Bi中存放第i枚硬币的重量,其中n-1个元素的值都是相同的,只有一个元素与其他元素值不同,则当n=8时即代表8枚硬币问题。由于8枚硬币问题限制只允许使用天平比较轻重,所以,算法中只能出现元素相加和比较的语句实验原理(算法基本思想) 利用三分法if (p = q)else if (q - p = 1)if (p 0)if (arrp = arr0)coin(arr, n, p + 1, q);else coin(arr, n, p, q - 1);else if (q n - 1)if (arrp = arrn - 1)coin(arr, n, p + 1, q);elsecoin(arr, n, p, q - 1);else if (p q)int temp = (q - p + 1) / 3;int sum1 = 0, sum2 = 0;for(int i = 0; i temp; i+)sum1 += arrp + i;sum2 += arrq - i;if (sum1 = sum2)/在中间coin(arr, n, p + temp, q - temp);else/在两边,不在中间if (sum1 = arrp + temp * temp)/左边的和中间的相等,在右边coin(arr, n, q - temp + 1, q);elsecoin(arr, n, p, p + temp - 1);程序代码 /*/* *n枚硬币问题* */* *通用减治算法* */* *算法分析与设计* */*#include #include #include using namespace std;void coin(int arr, int n, int p, int q)if (n = 2)cout无法判断n;return;if (p = q)cout假币的序号为:p+1endl;cout假币的重量为:arrp 0)if (arrp = arr0)coin(arr, n, p + 1, q);else coin(arr, n, p, q - 1);else if (q n - 1)if (arrp = arrn - 1)coin(arr, n, p + 1, q);elsecoin(arr, n, p, q - 1);else if (p q)int temp = (q - p + 1) / 3;int sum1 = 0, sum2 = 0;for(int i = 0; i temp; i+)sum1 += arrp + i;sum2 += arrq - i;if (sum1 = sum2)/在中间coin(arr, n, p + temp, q - temp);else/在两边,不在中间if (sum1 = arrp + temp * temp)/左边的和中间的相等,在右边coin(arr, n, q - temp + 1, q);elsecoin(arr, n, p, p + temp - 1);void ShowCoin()while(1)int i,n;cout请输入几枚硬币:n;if(n=0) break;int *arr=new intn;cout请输入各硬币的重量:endl;for(i=0;iarri; coin(arr, n, 0, n - 1);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论