算法设计与分析习题辅导.doc

上传人:s****u 文档编号:13172619 上传时间:2020-06-05 格式:DOC 页数:10 大小:80.42KB
返回 下载 相关 举报
算法设计与分析习题辅导.doc_第1页
第1页 / 共10页
算法设计与分析习题辅导.doc_第2页
第2页 / 共10页
算法设计与分析习题辅导.doc_第3页
第3页 / 共10页
点击查看更多>>
资源描述
1、 编写程序实现求两个整数a、b(ab)的最大公约数(a,b)的欧几里得算法,例如10920,21420。#includestdio.hvoid main()long a,b,c,r;printf(请输入整数a,b:);scanf(%ld,%ld,&a,&b); /输入整数a,bprintf(%ld,%ld),a,b);if(abr=a%b;while(r!=0)a=b;b=r; /实施“辗转相除”r=a%b;printf(=%ldn,b); /输出求解结果2、 试求含有数字7且不能被7整除的5位数的个数,并求这些整数的和。#includevoid main()int c,j,m,n,f10;long d,k,g1,g2,s1,s2,t;printf(请输入一位整数m,n:);scanf(%d,%d,&m,&n);t=1;for(k=1;k=n-1;k+)t=t*10; /求最小的n位整数tg1=0;s1=0;g2=0;s2=0;for(k=t;k=10*t-1;k+) /枚举每一个n位数d=k;for(j=0;j=9;j+)fj=0;for(j=1;j0&k%m0) /k含数字m且不能被m整除g1+;s1+=k;if(fm=2&k%m0) /k恰含2个数字m且不能m整除g2+;s2+=k;printf(含数字%d且不能被%d整除的%d位整数的个数g1=%ldn,m,m,n,g1);printf(这些整数的和为s1=%ldn,s1);printf(恰含2个数字%d且不能被%d整除的%d位整数个数g2=%ldn,m,m,n,g2);printf(这些整数的和为s2=%ldn,s2);3、 韩信在点兵的时候,为了知道有多少个兵,同时又能保住军事机密,便让士兵排队报数。按从1至5报数,记下最末一个士兵报的数为1;再按从1至6报数,记下最末一个士兵报的数为5;再按1至7报数,记下最末一个报的数为4;最后按1至11报数,最末一个士兵报的数为10。编写程序计算韩信至少有多少兵?#includevoid main()int n;for(n=1;n+)if(n%5=1&n%6=5&n%7=4&n%11=10)printf(韩信至少有兵:%dn,n);break;4、 核反应堆中有和两种粒子,每秒钟内一个粒子可以裂变为3个粒子,而一个粒子可以裂变为1个粒子和2个粒子。若在t=0时刻的反应堆中只有一个粒子,求在t秒时反应堆裂变产生的粒子和粒子数。#includevoid main()int t,a=1,b=0,h,i;scanf(%d,&h);for(i=1;i=h;i+)t=a;a=b;b=t*3+b*2;printf(%d,%dn,a,b);5、应用递归设计输出杨辉三角。#includevoid main()int n,i,j,k,a2020;printf(请输入行数 n:);scanf(%d,&n);for(i=1;i=n;i+)ai1=1;aii=1; /确定初始条件for(i=3;i=n;i+) for(j=2;j=i-1;j+) /递推实施aij=ai-1j-1+ai-1j;for(i=1;i=n;i+) /控制输出n行for(k=1;k=40-3*i;k+)printf( );for(j=1;j=i;j+)printf(%6d,aij);printf(n);6、 有一猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了1个。第2天早上又将剩下的桃子吃掉一半,又多吃了1个。以后每天早上都吃了前一天剩下的一半后又多吃1个。到第10天早上想再吃时,见只剩下1个桃子了。编写程序计算第1天共摘了多少个桃子。#include#includeint main() int i,j; j=1; for(i=1;i1),设计求n!的递归函数,调用该函数求#include double fun (double n)double sum=1;if(n=1)return 1; sum=n*fun(n-1); return sum; void main ()int n,i;double s=1;printf (Enter n:);scanf (%d,&n);for (i=1;i=n;i+)s=s+1.0/fun(i);printf (s= %fn,s);8、 把1,2,.,9这9个数字填入下式的9个方格中,数字不得重复,且要求1不得填在各分数的分母,且式中各分数的分子分母没有大于1的公因数,使下面的分数等式成立。这一填数分数等式共有多少个解?#include void main()int g,i,k,s,t,u,a10;long m1,m2,m3;i=1;a1=1;s=0;while (1)g=1;for (k=i-1;k=1;k-)if (ai=ak )g=0;break;if (i=9 & g=1 & a1a4)m1=a2*10+a3;m2=a5*10+a6;m3=a8*10+a9;if (a4*a7*m1+a1*a7*m2=a1*a4*m3 & a1!=1 & a4!=1 & a7!=1)s+;printf (%2d),s);printf (%ld/%d+%ld/,m1,a1,m2);printf (%d=%ld/%d,a4,m3,a7);printf ( );if (s%2=0) printf (n);if (i1) i-;if (ai=9 & i=1) break;else ai+;printf (共以上%d个解。 n,s);9、 编写程序实现整数762191754639820463中删除6个数字后,剩下的数字按原次序组成一个新的正整数,所得最大整数为多大?/贪心删数字大最大#include stdio.hvoid main ()int i ,k , t, m, n, x, a10000;char b100000;printf (请输入整数:);scanf (%s,b);for (n=0,i=0;bi!=0;i+)n+;ai=bi-48;printf (删除数字个数:);scanf (%d,&k);printf (以上%d位整数中删除%d个数字分别为:,n,k);t=0;m=0;x=0;i=t+1;while (xk&i=0&at=0&at=-1)t-;x=x+1;else t=i+;printf(n删除后所得最大数:);for(i=0,x=0;xn-k;i+)if(ai!=-1)printf(%dn,ai);x+;10、 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。有4个权值为2,7,5,4叶子节点,编写程序试构造一颗哈夫曼树。11、 已知6种物品和一个可容纳60重量的背包,物品i的重量为wi,产生的效益为pi。在装包时物品i可以装入,也可以不装,但不可拆开装。即物品i可产生的效益为xi*pi,这里xi属于0,1,c,wi,pi属于N+。设计如何装包,所得装包总效益最大。相关参数见下表W115P132W217P237W320P346W412P426W59P521W614P630#include stdio.h#define N 50void main ()int i,j,c,cw,n,sw,sp,pN,wN,mN10*N;printf (input n:); scanf (%d,&n);printf (input c:); scanf (%d,&c);for (i=1;i=n;i+)printf (input w%d,p%d:,i,i);scanf (%d,%d,&wi,&pi);for (j=0;j=wn)mnj=pn;else mnj=0;for (i=n-1;i=1;i-)for (j=0;j=wi & mi+1jmi+1j-wi+pi)mij=mi+1j-wi+pi;else mij=mi+1j;cw=c;printf (c=%dn,c);printf (背包所装物品:n);printf (i w(i) p(i)n);for (sp=0,sw=0,i=1;i mi+1cw)cw-=wi;sw+=wi;sp+=pi;printf (%d%3d %4dn,i,wi,pi);if (m1c-sp=pn)sw+=wi;sp+=pi;printf (%d%3d %4dn,n,wn,pn);printf (w=%d,pmax=%dn,sw,sp);12、 (贪心算法)已知5种物品和一个可容纳90重量的背包,物品i的重量为wi,产生的效益为pi。在装包时物品i可拆开装。即可只装每种物品的一部分,物品i的一部分可产生的效益为xipi,这里xi属于0,1,pi大于0。设计如何装包,所得装包总效益最大。相关参数见下表W1P132.556.2W2P225.340.5W3P337.470.8W4P441.378.4W5P528.240.2/可拆背包程序实现#include#define N 100void main()float pN,wN,xN,c,cw,s,h;int i,j,n;printf(input n:);scanf(%d,&n);printf(input c:);scanf(%f,&c);for(i=1;i=n;i+)printf(input w%d,p%d:,i,i);scanf(%f,%f,&wi,&pi);for(i=1;i=n-1;i+)for(j=i+1;j=n;j+)if(pi/wipj/wj)h=pi;pi=pj;pj=h; h=wi;wi=wj;wj=h;cw=c;s=0;for(i=1;icw)break;xi=1.0;cw=cw-wi;s=s+pi;xi=(float)(cw/wi);s=s+pi*xi;printf(装包:);for(i=1;i=n;i+)if(xi0&xi1)printf(n装入重量为%5.1f效益为%5.1f的物品百分之%5.1f.,wi,pi,xi*100);printf(n所得最大效益为:%7.1f,s);
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!