[计算机软件及应用]算法实验报告.docVIP

  • 19
  • 0
  • 约9.7千字
  • 约 30页
  • 2018-03-04 发布于浙江
  • 举报
[计算机软件及应用]算法实验报告

算法分析与设计 实验报告 班级:#### 学号:#### 姓名:#### 实验一 算法实现一 实验目的与要求 熟悉C/C++语言的集成开发环境; 通过本实验加深对分治法、贪心算法的理解。 实验内容: 掌握分治法、贪心算法的概念和基本思想,并结合具体的问题学习如何用相应策略进行求解的方法。 实验题 1. 【伪造硬币问题】给你一个装有n个硬币的袋子。n个硬币中有一个是伪造的。你的任务是找出这个伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。试用分治法的思想写出解决问题的算法,并计算其时间复杂度。 (1) 源程序: #includeiostream.h #includestdlib.h #includetime.h int findTheCoin(int q[],int a,int b); int quantity(int q[],int a,int b); void main() { time_t ts; srand((unsigned) time(ts)); const int Max=70; int n,k; while(true) { cout 请输入硬币的个数 endl; cin n; int q[Max]; int i; for( i=1;i=n;i++) { q[i]=2; } k=rand()%n; if(k==0) k=n; q[k]=1; cout随机产生的硬币排列顺序endl; for(i=1;i=n;i++) { coutq[i] ; if(i%5==0) coutendl; } coutendl; int p=findTheCoin(q,1,n); cout伪造硬币的位置:pendl; cout=======================endl; } } int quantity(int q[],int a,int b) { int total=0; int i; for( i=a;i=b;i++) total+=q[i]; return total; } int findTheCoin(int q[],int a,int b) { if(a==b) return a; int n=b-a+1; int c=n%3; int m=a+n/3-1; int d; switch(c) { case 0: if (quantity(q,a,m)==quantity(q,m+1,m+n/3)) { d=findTheCoin(q,m+n/3+1,m+2*(n/3)); return d; } else if (quantity(q,a,m)==quantity(q,m+n/3+1,m+2*(n/3))) { d=findTheCoin(q,m+1,m+n/3); return d; } else { d=findTheCoin(q,a,m); return d; } //break; case 1: if( (quantity(q,a,m)==quantity(q,m+1,m+n/3)) (quantity(q,m+n/3+1,m+2*(n/3))==quantity(q,m+1,m+n/3)) ) return m+2*(n/3)+1; else { if (quantity(q,a,m)==quantity(q,m+1,m+n/3)) { d=findTheCoin(q,m+n/3+1,m+2*(n/3)); return d; } else if (quantity(q,a,m)==quantity(q,m+n/3+1,m+2*(n/3))) { d=findTheCoin(q,m+1,m+n/3); return d; } else { d=findTheCoin(q,a,m); return d; } } //break; case 2: if(q[m+2*(n/3)+1]==q[m+2*(n/3)+2]) { if (quantity(q,a,m)==quantity(q,m+1,m+n/3)) { d=findTheCoin(q,m+n/3+1,m+2*(n/3)); return d; } els

文档评论(0)

1亿VIP精品文档

相关文档