网站大量收购独家精品文档,联系QQ:2885784924

算法分析与设计(李清勇)——分治.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与设计(李清勇)——分治

4-1 整数分解问题#include stdio.h#include math.h#define N 100intfenjie(int n);void main(){int n;int count;printf(input a number\n);do{scanf(%d,n);}while(n0);count=fenjie(n);printf(%d,count);}intfenjie(int n){inti;int k=0;int temp=0;int a[N];for(i=2;isqrt(n);i++){if(n%i==0){a[k]=i;k++;}}for(i=0;ik;i++){for(j=0;ik;i++){if(a[i]*a[j]==n)printf(%d=%d*%d\n,n,a[i],a[j]);temp++;}}return temp;}#includestdlib.h??#includemath.h??void?suanfa();??void?zdlch(int?b);??void?surt(int?k);?int?N;//全局变量?油井数?int?s[100];//n个油井y轴坐标??int?sumin;//输油管道最小长度void?main()?{???int?i;???sumin=0;???scanf(%d,N);???for(i=0;iN;i++)?{????scanf(%d,s[i]);????scanf(%d,s[i]);???}??suanfa();//调用关键算法函数???printf(%d\n,sumin);?}???void?suanfa()?{???if(N%2==0)//当油井数是偶数时???surt(N/2);??else????surt((N+1)/2);//油井是奇数时??}???void?surt(int?k)//从大到小第k个数是b调用suanfa(b)函数求出路程??{???int?j=0,b,l,m;???int?a=N;???int?i;???while(j!=k)?{?????b=s[0];????for(i=0;ia;i++)?{?????if(s[i]=b)?????{??b=s[i];??????l=i;?????}}??m=s[l];s[l]=s[a-1];s[a-1]=m;a--;j++;??}???zdlch(b);??}???Void?zdlch(int?b)??????//求最小长度的总和?????????????????????????????{????int?i;???for(i=0;iN;i++)????sumin=sumin+(int)fabs(b-s[i]);??}4-4 麦森书问题#include?cstdio#include?cstring#include?cmath#include?iostream#include?algorithmusing?namespace?std;int?f[505];//后500位数void?mul(int?a)//乘以a{????int?i,j,k,temp=0;????for(i=0;i500;i++){????????temp=temp+f[i]*a;????????f[i]=temp%10;????????temp=temp/10;????}}void?sub(int?x)//减x{????f[0]-=x;????int?k=0;????while(k500f[k]0){????????f[k]=f[k]+10;????????f[k+1]--;????????k++;????}}int?main(){????int?n;????while(scanf(%d,n)!= EOF){????????int?i,j,k;???????memset(f,0,sizeof(f));????????f[0]=1;????????//这里是分成2^10一段,那样就可以将乘法次数减少1/10????????//若还想更快,可以再分大点,比如2^20这样,不过最好不要超过int????????for(i=0;in/10;i++)mul(1024);????????for(i=0,k=1;in%10;i++)k=k*2;//分段后剩余的部分????????mul(k);????????sub(1);????????printf(%d\n,int(n*log(2)/log(10)+1));????????//输出????????for(i=0,k=499;i10;i++)?{????????????for(j=0;j50;j++){????????????????printf(%d,f[k]);??????????????

您可能关注的文档

文档评论(0)

wst34008 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档