![算法设计方法与优化滕国文部分课后习题答案72页_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-7/27/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c7/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c71.gif)
![算法设计方法与优化滕国文部分课后习题答案72页_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-7/27/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c7/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c72.gif)
![算法设计方法与优化滕国文部分课后习题答案72页_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-7/27/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c7/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c73.gif)
![算法设计方法与优化滕国文部分课后习题答案72页_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-7/27/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c7/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c74.gif)
![算法设计方法与优化滕国文部分课后习题答案72页_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-7/27/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c7/e4e8f0e4-4eb5-43ab-8bac-60d2855d70c75.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章:求值法2-1有三个数a,b,c,要求按从大到小的顺序把他们输出。 #include stdio.hvoid fun(int a,int b,int c) int t;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(%d,%d,%d,c,b,a);void main()int a,b,c;printf(input number:);scanf(%d%d%d,&a,&b,&c);fun(a,b,c);printf(n);2-2给定n个数,求这些数中的最大值。#includevoidmain()inti,j,temp,
2、n;inta1000;scanf(%d,n);for(i=0;i9;i+)scanf(%d,ai);for(j=0;jn;j+)for(i=0;iai+1)temp=ai;ai=ai+1;ai+1=temp;printf(%dn,an);2-3求1+2+3+100的和。#include stdio.hvoid main()int num,sum=0;for(num=1;num=100;num+)sum+=num;printf(%dn,sum);2-4判断一个数n能否同时被3和5整数。#include stdio.hint fun(int n)if(n%3=0&n%5=0)return n;el
3、sereturn 0;2-5将100至200之间的素数输出。#includestdio.h#include math.hint isp(int m)int i;for(i=2;i=sqrt(m);i+)if(m%i=0)return 0;return 1;void main()int n;for(n=100;n=200;n+)if(isp(n)printf(%dt,n);2-6求两个数m和n的最大公约数。#includestdio.hint num(int m,int n)int r,t;if(mn)t=m;m=n;n=t;r=m%n;while(r)m=n;n=r;r=m%n;return
4、n;void main()int x,y,s;printf(input x and y:);scanf(%d%d,&x,&y);s=num(x,y);printf(%dn,s);2-7使给定的一个4*4的二维数组转置,即行列互换。#include #define x 4 int axx; void main() void zhuan(int axx); int m,n; printf(please input %d nubbersn,x*x); for(m=0;mx;m+) for(n=0;nx;n+) scanf(%d,&amn); printf(n原数组:n); for(m=0;mx;m+
5、) for(n=0;nx;n+) printf(%5d,amn); printf(n); zhuan(a); printf(n转置后的数组:n); for(m=0;mx;m+) for(n=0;nx;n+) printf(%5d,amn);printf(n); void zhuan(int axx) int c,d,e; for(c=0;cx;c+) for(d=c+1;dx;d+) e=acd ; acd=adc; adc=e; 2-8输出50个学生中成绩高于80分者的学号和成绩。#includeint main()int a105,i,j;printf(请输入50个学生的成绩);for(i
6、=0;i10;i+)for(j=0;j5;j+)scanf(%d,&aij);for(i=0;i10;i+)for(j=0;j80)printf(这个学生的学号是%d,这个学生的成绩是%dn,i*10+j+1,aij);return 0;2-9输出年份1990-2500中的所有闰年。#includestdio.hvoid leap()int y;for(y=1990;y=2500;y+)if(y%4=0&y%100!=0)|y%400=0)printf(%d ,y);printf(n);void main()leap();2-10.求1-1/2+1/3-1/4+1/99-1/100的值。#in
7、cludeint main() double sum; int i; for(sum=0,i=1;i0)#includestdio.h#include math.hvoid main()int a,b,c;float x1,x2;printf(input a and b and c:);scanf(%d%d%d,&a,&b,&c);x1=(-b)+sqrt(b*b-4*a*c)/(2*a);x2=(-b)-sqrt(b*b-4*a*c)/(2*a);if(b*b-4*a*c=0&a!=0)printf(%.2f,%.2fn,x1,x2);elseprintf(flasen);2-13.输出成绩
8、等级“优秀”、“良好”、“中等”。“及格”,“不及格”。其中90分(含90分)以上为优秀,80-89分为良好,70-79分为“中等”,60-69分为“及格”,60分以下为不及格。#includevoidmain()intscrnum;printf(请输入考试成绩);scanf(%d,&scrnum);if(scrnum=90)printf(优秀n);elseif(scrnum=70&scrnum=60&scrnum70)printf(及格n);elseif(scrnum60)printf(不及格!n);2-14. 给定一个正整数,求它的位数并分别输出每一位数字。#includestdio.hv
9、oid main()int n,i=0,k;printf(input n:);scanf(%d,&n);while(n!=0)k=n%10;printf(%d ,k);n=n/10;i+;printf(n%dn,i);2-15. 输出所有水仙花数(水仙花数是指一个三位数,其各个数字立方和等于它本身)。#includestdio.hvoid main()int a,b,c,i;for(i=100;i=999;i+)a=i/100;b=(i%100)/10;c=i%10;if(i=a*a*a+b*b*b+c*c*c)printf(%dt,i);printf(n);2-16. 求1!+2!+3!+.
10、30!的值。2-17. 求Fibonacci数列前N个数。Fibonacci数列的特点;第一个和第二个数都为1,从第三个开始,每个数都等于其前两个数的和。#includestdio.h#define N 100void main()int n,i,fN;f0=f1=1;printf(input n:);scanf(%d,&n);for(i=2;in;i+)fi=fi-1+fi-2;for(i=0;in;i+)printf(%dt,fi);printf(n);2-18. 把200以内不能被3整除的数输出。#includestdio.hvoid main()int i;for(i=0;i200;i
11、+)if(i%3!=0)printf(%dt,i);printf(n);2-19. 班级有20名小学生,有语文,数学,英语的成绩,求班级各科的平均分。#includestdio.hvoidmain()inti;floatavg1,avg2,avg3,s1=0,s2=0,s3=0,a20,b20,c20;for(i=0;i20;i+)scanf(%f%f%f,&ai,&bi,&ci);for(i=0;i20;i+)s1+=ai;s2+=bi;s3+=ci;avg1=s1/20;avg2=s2/20;avg3=s3/20;printf(%f,%f,%f,avg1,avg2,avg3);2-20.
12、输出100以内的所有素数,并且5个一行。#includestdio.h#include math.hint isp(int m)int i;for(i=2;i=sqrt(m);i+)if(m%i=0)return 0;return 1;void main()int n,k;for(n=1;n100;n+)if(isp(n)printf(%dt,n);k+;if(k%5=0)printf(n);printf(n);2-21. 输出1000到10000以内的可逆素数。#include #include int inverse(int n); int isPrimer(int n); main()
13、int i; for (i=1000;i0;n/=10) a=n%10; m=m*10+a; return(m); int isPrimer(int n) int i,judge=1; for (i=2;i=sqrt(n);i+) if (n%i=0) judge=0; break; return judge; 2-22. 两个数之差为2的素数,称谓孪生素数。试输出5组孪生数。#includestdio.hmain()inti,j;intflag,n=0;inta100;for(i=2;i=100;i+)flag=1;for(j=2;ji;j+)if(i%j=0)flag=0;break;if
14、(flag=1)an=i;n+;for(i=0;in;i+)for(j=i+1;jn;j+)if(aj-ai=2)printf(%d,ai);printf(%d,aj);if(aj+1-aj=2)printf(%d,aj+1);i=3;printf(n);2-23. 试输出1000到10000以内的对称数,并输出对称的个数。2-24.输入10个学生5门课的成绩,计算每个学生的平均分,每门课的平均分兵找出各门课最高分数所对应的学生。2-25. 输入一行字符,统计其中数字,空格,小写字母,大写字母以及其他符号的个数。#include stdio.h void main() char s; int
15、i=0,j=0,k=0,m=0,da=0,xiao=0; printf(please input the stringn); while(s=getchar()!=n) /*循环从键盘读入字符直到一行结束(输入回车)*/ if(s=a)|(sA) if(s=A)da+; if(s=a)xiao+; i+; /*i存入字母数*/ else if(s= ) j+; /*j存入空格数,注意s= 里面是有一个空格的*/ else if(s47)k+; /*k存入数字数*/ else m+; /*m存入其它符号数*/ printf(字符:%d 大写字母:%d 小写字母:%dn空格:%dn数字:%dn其它
16、:%dn,i,da,xiao,j,k,m); /*打印行中的字母,空格,数字,其它字符数*/ 2-26. 任意给定n值,按如下螺旋的方式输出方阵:n=3时输出123894765n=4时输出12341213145111615610987#include Void spi(int n)int i=-1,j=0,k=n,a100100,r,s=1,t=1;while(s=n*n)for(r=0;rk;r+)i+=t;aji=s+;for(r=k;r2*k-1;r+)j+=t;aji=s+;k-;t=-t;for(i=0;in;i+)for(j=0;jn;j+)printf(%3d,aij);prin
17、tf(n);void main()int n;printf(input a number);scanf(%d,&n);spi(n);2-27. 输出魔方阵(魔方阵是它的每一行,每一列和对角线之和均相等的方阵)如三阶魔方阵为:816357492#includestdio.hvoid main() int a5050,n,x,y,i,j,k; printf(输入魔方阵的阶数n:n); scanf(%d,&n); if(n%2=0) n+; for (i=1;i=n;i+) for (j=1;j=n;j+) aij=0; i=1;j=(n+1)/2;aij=1; for (k=2;k=n*n;k+)
18、 i-;j+; if (in) i+=2;j-; if(in) j=1; if (aij!=0) i+=2;j-; aij=k; for (i=1;i=n;i+) for (j=1;j=n;j+) printf(%3d ,aij); if(j=n) printf(n); getchar();getchar();2-28编程打印形如下规律的n*n方阵例如下图:使左对角线和右对角线上的元素为0,它们上方的元素为1,左方的元素为2,下方元素为3,右方元素为4,下图是一个符合条件的阶矩阵。0111020104220442030403330第三章:累加法3-1编程求1-2+3-4+5-6+7-+99-1
19、00。#includemain()inti,s;for(i=1,s=0;i=100;i+)if(i%2!=0)s+=i;elses-=i;printf(%dn,s);getch();3-21-1/2+1/3-1/4+-1/100#include void p2()float s=0;int p=-1;for(int i=1;i101;i+)p*=(-1);s+=p*1.0/i;printf(1-1/2+1/3-1/4+-1/100的结果是:%fn,s);void main()p2();3-3求100以内所有素数的和#includeint fun(int m)for(int i=2;im;i+)
20、if(m%i=0)return 0;return 1;void main()int i;for(i=2;i=100;i+)if(fun(i)printf(%dn,i);3-10输入一个数n,求1+2+3+4+5+4+3+2+1的值#includeint fun(int n)int s=0;for(int i=1;i=n;i+)s+=i;return s;void main()int n;scanf(%d,&n);printf(%d,2*fun(n)-n);3-15求1000以内所有的完全数的和(完全数是指一个数除其本身外的因子之和等于该数。例如,28=1+2+4+7+14,因此28为完全数)。
21、#includeint fun(int n)int s=0;for(int i=1;i=n-1;i+)if(n%i=0) s=s+i;if(s=n)printf(%d ,n); return s;elsereturn 0;void main()int sum=0;for(int i=1;i=1000;i+)sum+=fun(i);printf(n);printf(%dn,sum);3-19. 计算S=1+2+3+n+(n+1)+(n+2)+ 在累加过程过程中,求当S的值首次大于3000时的n的n值是多少?#includevoidmain()intn,s;n=1,s=0;while(s3000)
22、s+=n;n+;/这句程序是怎样实现功能的?n-;/这句程序放在这又有什么用?printf(n=%d,s=%dn,n,s);3-24输入一行字符,统计其中的英文字母个数。提示:输入到字符n时停止输入。#includevoid main()char a100;int count=0,i;for(i=0;i+) ai=getchar();if(ai=n)break;if(ai=a&ai=A&ai=Z)count+; printf(%d,count);3-30求e的值,根据输入的n值,求前n 项的和。e=1+1/1!+1/2!+1/3!+1/n!。#includefloat fun(int n)in
23、t p=1;for(int i=1;i=n;i+)p*=i;return p;void main()int n;float sum=1;scanf(%d,&n);for(int i=1;i=n;i+)sum+=1/fun(i); printf(%f,sum);第四章:累乘法4-6已知s=1!*2!*3!*n!.#include void main() int i=1,t=1,s=1; while(s2000000) t*=i;s*=t;i+; printf(n=%d s=%dn,i-1,s/t);4-13求这样一个三位数,该三位数等于其每位数字阶乘之和#includefloat fun(int
24、 n)int p=1;for(int i=1;i=n;i+)p*=i;return p;void main()int a1,a2,a3;for(int a=100;a1000;a+)a1=a/100; a2=a%100/10; a3=a%10; if(a=fun(a1)+fun(a2)+fun(a3) printf(%d ,a);4-15老师给十个小孩分发糖果,第一个和第二个小孩各分一块糖,之后为奇数的小孩可得到前个奇数小孩的2倍糖果,为偶数的小孩可得到前个偶数小孩的3倍糖果。问第9个、第10个小孩各获得多少糖果。 #include void main() int i=1,j=1; for(i
25、nt k=3;k11;k+) if(k%2=0) j*=3; else i*=2; printf(%d %dn,i,j);4-17自守数是指一个数的平方的尾数等于自身的自然数。例如:252=625,762=5776,93762=87909376.请求出200000以内的自守数。#include void main() long i,i2,m,k=1; for (i=0;i0) k*=10; i2 = i*i; m = i2%k; if (m=i) printf (%ld*%ld=%ldn,i,i,i2);4-18假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后的5年中
26、每年的年底取出1000元,到第五年刚好取完,请算出他存钱时应存多少。#include void main()float a=0;for(int i=1;i=5;i+)a=(a+1000)/(1+(0.0063*12); printf(%f n,a);4-19.找出100-999之间(含100和999)所有整数中各个位上数字之积为x(x为一正整数)的整数,然后输出符合条件的整数个数作为函数值返回。例如,当x为10时,100-999之间各个位上数字之积为10的整数有215,512共2个。#include int s(int n) int a,b,c,j=0; for(int i=100;i1000
27、;i+) a=i/100; b=(i%100)/10; c=i%10; if(a*b*c=n) j+; printf(%d ,i); return j;void main() int n; scanf(%d,&n); printf(一共%d个n,s(n);4-20.编写fun函数,计算下式前n项的和作为函数返回值。 S=(1*3)/22+(3*5)/42+(5*7)/62+(2n-1)*(2n+2)/(2n)2#include double fun(int n) double S=0; for(int i=1;i=n;i+) float t1,t2; t1=(2*i-1)*(2*i+1); t
28、2=4*i*i; S+=t1/t2; return S;void main() int n; scanf(%d,&n); printf(%fn,fun(n);4-23.计算并输出以下列数的前n项之积Sn ,直到Sn-1大于q为止,q的值通过形参传入(q为输入值)。#include float sum(int q) int n=1; float s=2/1; while(sq) s+=(n+1)/n; n+; return s;void main() int q; scanf(%d,&q); printf(Sn=%fn,sum(q);4-24.求s=aaaa-aaa-aa-a(此处aaaa表示n
29、和a,a和n的值在1-9之间),例如:a=3,n=6,则以上表达式为:s=333333-33333-3333-333-33-3,其值为196298.#include int fun(int a,int n) int s=a,sum=a;for(int i=0;in-2;i+)a*=10;/得到 30 300 3000 s+=a;/得到 33 333 3333; sum+=s; / 3+(3+30)+(3+30+300) a*=10;s+=a;return s-sum;void main() int a,n; scanf(%d%d,&a,&n); printf(%dn,fun(a,n);4-25
30、将s所指字符串中ASCII值为奇数的字符累乘,并将其乘积返回给主函数。#include #include void main()char a100; gets(a); int sum=1; for(int i=0;istrlen(a);i+)if(ai%2!=0)sum = sum*ai;printf(%dn,sum);第五章:递推法5-1. 已知数列 an ,通项an=n*an-1,a1=1,求第n项的值#include void main() int t,i,t1=1,n; printf(请输入n:); scanf(%d,&n); for(i=1;i=n;i+) t=i*t1; t1=t;
31、 printf(%dn,t);5-2#include void fun(int n)int i,c,a=1,b=1,s;s=a+b; for(i=3;i=n;i+)c=a+b;s=s+c;a=b;b=c;printf(%d,s);void main()int n;printf(input n:);scanf(%d,&n);fun(n);5-4.#include void main()int s=0;for(int i=1;i100;i+=2)int t=1;for(int j=i;j=i+2;j+) t*=j; s+=t;printf(结果为%dn,s);5-5.#include int fu
32、n()int i,a=10;for(i=5;i1;i-)a=a+2;return a;int main()printf(%dn,fun();5-7有一组数规律如下:0,5,5,10,15,25,40,求出该数列第n项的数值。#includevoid fun(int n)int a1=0,a2=5,a3;a3=a1+a2;for(int i=0;in-3;i+) a1=a2; a2=a3; a3=a1+a2;printf(%dn,a3);void main()int n;scanf(%d,&n);fun(n);5-8.#include void main()int a44=2,6,2,1,8,4
33、,1,5,6,8;int s=2;for(int i=1;i4;i+) int min=ai0; for(int j=0;j=i;j+) /printf(%d,aij); if(aijmin) min=aij; /printf(n); /printf(%dn,min);/选择路径 s+=min;printf(最终得分:%dn,s);5-9一个富翁给他的儿子的四年大学生活存一笔钱,儿子每月只能取3000元作为下个月的生活费,采用的是整存零取的方式。已知年利率为1.71%,请问富翁一次性需要存入多少钱#includedouble fun()double a=0;int i;for(i=1;i=48
34、;i+)a=(a+3000)/(1+(0.0171/12); printf(%.3fn,a);return a;void main()fun();5-10.#include void tao()int i,a;a=2;for(i=9;i=1;i-)a=(a+1)*2+2;printf(sum=%dn,a);void main()tao();5-11.#include int fun(int n) int s20,sum=0; s0=3,s1=7; for(int i=2;i=n;i+) si=2*si-1+si-2; /printf(%dn,si); return sn-1;void main
35、() int N; scanf(%d,&N); printf(%dn,fun(N);5-12.#includevoid main()int i,p,n,total; scanf(%d %d,&n,&p); total=2*p; for(i=p+1;i=0,y=0,输入一个数n,求出元素从小到大排列的双幂数列的第n项值,以及前n项和。#include int main()int n,i=2,k=2,m=3,a100=0,1,sum=0;scanf(%d,&n);while(i=n)/k=2;m=3;if(km)ai+=k;k*=2;elseai+=m; m*=3; for(i=1;i=n;i+)
36、printf(%dn,ai);sum+=ai;printf(sum=%dn,sum); return 0;5-15.#include void main() int s20,i; s1=1,s2=2; int n; scanf(%d,&n); for(i=3;i=n;i+) si=si-1+si-2+1; printf(%dn,sn);5-21一张圆薄饼,切100刀,最多能切成多少块?#includevoid main()int n=100,a;a=1+n*(n+1)/2; printf(%dn,a);第六章:递归法6-1.#include float Avg(int a,int n); fl
37、oat Avg(int a,int n) if(n=0) return a0; else return Avg(a,n-1)+an; void main() int array100; int n;scanf(%d,&n);for(int i=0;in;i+) scanf(%d,&arrayi); /要这样输入吧 /Avg(array,n); printf(这%d个数的平均值是:%fn,n,Avg(array,n-1)/n); 6-2.#include void main()int n;long fun(int x);scanf(%d,&n);printf(%ldn,fun(n);long f
38、un(int x) if (x=1) return 1; return x+fun(x-1);6-3.#include int Func(int n) if(n 2)return 1; else return n*Func(n-1); int main() int n; printf(input n:n); scanf(%d,&n);printf(n! = %dn,Func(n);return 0; 6-4.#includevoid permute(int);#define N 7int aN;int n=0;void main() int i; for (i=0;iN;i+) ai=i+1;
39、 permute(N); printf(total is:%dn,n);void permute(int k) int i,j,temp; if (k=1) for (i=0;iN;i+) printf(%d ,ai); printf(.t); n+; if (n%4=0) printf(n); else permute(k-1); for (j=N-k+1;jN;j+) temp=aN-k; aN-k=aj; aj=temp; permute(k-1); temp=aN-k; aN-k=aj; aj=temp; 6-5.#include int s100;void Comb(int step, int n,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人力资源招聘居间合同格式
- 文创园区卫生间翻新合同
- 牛棚承包合同
- 化工产品购销合同
- 电商承包合同协议书
- 玩具销售合同范例
- 喝啤酒大赛比赛规则
- 场地租赁合同协议书
- 统编版初中语文七年级上册第九课《从百草园到三味书屋》听评课记录
- 企业战略规划知识管理系统作业指导书
- 2024新版《药品管理法》培训课件
- 浙江省杭州市2024年中考英语真题(含答案)
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 扁钢理论重量表
- 中央企业商业秘密安全保护技术指引2015版
- 人教版初中英语八年级下册 单词默写表 汉译英
- 《静脉治疗护理技术操作规范》考核试题及答案(共140题)
- 人事测评理论与方法-课件
- 最新卷宗的整理、装订(全)课件
- 信访事项受理、办理、复查、复核、听证程序课件
- 【北京】施工现场安全生产标准化管理图集
评论
0/150
提交评论