算法设计与分析习题辅导.docx
- 文档编号:2844849
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:11
- 大小:23.01KB
算法设计与分析习题辅导.docx
《算法设计与分析习题辅导.docx》由会员分享,可在线阅读,更多相关《算法设计与分析习题辅导.docx(11页珍藏版)》请在冰豆网上搜索。
算法设计与分析习题辅导
1、编写程序实现求两个整数a、b(a>b)的最大公约数(a,b)的欧几里得算法,例如10920,21420。
#include"stdio.h"
voidmain()
{
longa,b,c,r;
printf("请输入整数a,b:
");
scanf("%ld,%ld",&a,&b);//输入整数a,b
printf("(%ld,%ld)",a,b);
if(a
{c=a;a=b;b=c;}//交换a,b,确保a>b
r=a%b;
while(r!
=0)
{
a=b;b=r;//实施“辗转相除”
r=a%b;
}
printf("=%ld\n",b);//输出求解结果
}
2、试求含有数字7且不能被7整除的5位数的个数,并求这些整数的和。
#include
voidmain()
{
intc,j,m,n,f[10];
longd,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位整数t
g1=0;s1=0;
g2=0;s2=0;
for(k=t;k<=10*t-1;k++)//枚举每一个n位数
{d=k;
for(j=0;j<=9;j++)f[j]=0;
for(j=1;j<=n;j++)
{
c=d%10;f[c]+=1;//统计n位整数k中各数字的个数
d=d/10;
}
if(f[m]>0&&k%m>0)//k含数字m且不能被m整除
{g1++;s1+=k;}
if(f[m]==2&&k%m>0)//k恰含2个数字m且不能m整除
{g2++;s2+=k;}
}
printf("含数字%d且不能被%d整除的%d位整数的个数g1=%ld\n",m,m,n,g1);
printf("这些整数的和为s1=%ld\n",s1);
printf("恰含2个数字%d且不能被%d整除的%d位整数个数g2=%ld\n",m,m,n,g2);
printf("这些整数的和为s2=%ld\n",s2);
}
3、韩信在点兵的时候,为了知道有多少个兵,同时又能保住军事机密,便让士兵排队报数。
按从1至5报数,记下最末一个士兵报的数为1;
再按从1至6报数,记下最末一个士兵报的数为5;
再按1至7报数,记下最末一个报的数为4;
最后按1至11报数,最末一个士兵报的数为10。
编写程序计算韩信至少有多少兵?
#include
voidmain()
{
intn;
for(n=1;;n++)
if(n%5==1&&n%6==5&&n%7==4&&n%11==10)
{printf("韩信至少有兵:
%d\n",n);
break;
}
}
4、核反应堆中有α和β两种粒子,每秒钟内一个α粒子可以裂变为3个β粒子,而一个β粒子可以裂变为1个α粒子和2个β粒子。
若在t=0时刻的反应堆中只有一个α粒子,求在t秒时反应堆裂变产生的α粒子和β粒子数。
#include
voidmain()
{
intt,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,%d\n",a,b);
}
5、应用递归设计输出杨辉三角。
#include
voidmain()
{
intn,i,j,k,a[20][20];
printf("请输入行数n:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{a[i][1]=1;a[i][i]=1;}//确定初始条件
for(i=3;i<=n;i++)
for(j=2;j<=i-1;j++)//递推实施
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<=n;i++)//控制输出n行
{for(k=1;k<=40-3*i;k++)
printf("");
for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
6、有一猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了1个。
第2天早上又将剩下的桃子吃掉一半,又多吃了1个。
以后每天早上都吃了前一天剩下的一半后又多吃1个。
到第10天早上想再吃时,见只剩下1个桃子了。
编写程序计算第1天共摘了多少个桃子。
#include
#include
intmain()
{
inti,j;
j=1;
for(i=1;i<10;i++)
{
j=2*(j+1);
}
printf("第一天摘桃子的个数为%d\n",j);
return0;
}
7、阶乘n!
定义:
n!
=1(n=1);n!
=n*(n-1)!
(n>1),设计求n!
的递归函数,调用该函数求
#include
doublefun(doublen)
{
doublesum=1;
if(n==1)return1;
sum=n*fun(n-1);
returnsum;
}
voidmain()
{
intn,i;
doubles=1;
printf("Entern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s+1.0/fun(i);
printf("s=%f\n",s);
}
8、把1,2,...,9这9个数字填入下式的9个方格中,数字不得重复,且要求1不得填在各分数的分母,且式中各分数的分子分母没有大于1的公因数,使下面的分数等式成立。
这一填数分数等式共有多少个解?
#include
voidmain()
{
intg,i,k,s,t,u,a[10];
longm1,m2,m3;
i=1;a[1]=1;s=0;
while
(1)
{
g=1;
for(k=i-1;k>=1;k--)
if(a[i]==a[k])
{
g=0;break;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 习题 辅导
![提示](https://static.bdocx.com/images/bang_tan.gif)