算法设计与分析习题辅导Word下载.docx

上传人:b****3 文档编号:15755913 上传时间:2022-11-15 格式:DOCX 页数:11 大小:23.01KB
下载 相关 举报
算法设计与分析习题辅导Word下载.docx_第1页
第1页 / 共11页
算法设计与分析习题辅导Word下载.docx_第2页
第2页 / 共11页
算法设计与分析习题辅导Word下载.docx_第3页
第3页 / 共11页
算法设计与分析习题辅导Word下载.docx_第4页
第4页 / 共11页
算法设计与分析习题辅导Word下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

算法设计与分析习题辅导Word下载.docx

《算法设计与分析习题辅导Word下载.docx》由会员分享,可在线阅读,更多相关《算法设计与分析习题辅导Word下载.docx(11页珍藏版)》请在冰豆网上搜索。

算法设计与分析习题辅导Word下载.docx

=%ld\n"

b);

//输出求解结果

}

2、试求含有数字7且不能被7整除的5位数的个数,并求这些整数的和。

#include<

stdio.h>

intc,j,m,n,f[10];

longd,k,g1,g2,s1,s2,t;

请输入一位整数m,n:

%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;

=10*t-1;

k++)//枚举每一个n位数

{d=k;

for(j=0;

j<

=9;

j++)f[j]=0;

for(j=1;

=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&

0)//k恰含2个数字m且不能m整除

{g2++;

s2+=k;

含数字%d且不能被%d整除的%d位整数的个数g1=%ld\n"

m,m,n,g1);

这些整数的和为s1=%ld\n"

s1);

恰含2个数字%d且不能被%d整除的%d位整数个数g2=%ld\n"

m,m,n,g2);

这些整数的和为s2=%ld\n"

s2);

3、韩信在点兵的时候,为了知道有多少个兵,同时又能保住军事机密,便让士兵排队报数。

按从1至5报数,记下最末一个士兵报的数为1;

再按从1至6报数,记下最末一个士兵报的数为5;

再按1至7报数,记下最末一个报的数为4;

最后按1至11报数,最末一个士兵报的数为10。

编写程序计算韩信至少有多少兵?

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秒时反应堆裂变产生的α粒子和β粒子数。

intt,a=1,b=0,h,i;

%d"

h);

for(i=1;

i<

=h;

i++){

t=a;

a=b;

b=t*3+b*2;

%d,%d\n"

5、应用递归设计输出杨辉三角。

 

intn,i,j,k,a[20][20];

请输入行数n:

i++)

{a[i][1]=1;

a[i][i]=1;

}//确定初始条件

for(i=3;

i++)

for(j=2;

=i-1;

j++)//递推实施

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;

i++)//控制输出n行

{for(k=1;

=40-3*i;

printf("

"

=i;

printf("

%6d"

a[i][j]);

\n"

6、有一猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了1个。

第2天早上又将剩下的桃子吃掉一半,又多吃了1个。

以后每天早上都吃了前一天剩下的一半后又多吃1个。

到第10天早上想再吃时,见只剩下1个桃子了。

编写程序计算第1天共摘了多少个桃子。

stdlib.h>

intmain()

{

inti,j;

j=1;

10;

{

j=2*(j+1);

}

第一天摘桃子的个数为%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("

for(i=1;

s=s+1.0/fun(i);

s=%f\n"

s);

8、把1,2,...,9这9个数字填入下式的9个方格中,数字不得重复,且要求1不得填在各分数的分母,且式中各分数的分子分母没有大于1的公因数,使下面的分数等式成立。

这一填数分数等式共有多少个解?

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;

}

if(i==9&

g==1&

a[1]<

a[4])

m1=a[2]*10+a[3];

m2=a[5]*10+a[6];

m3=a[8]*10+a[9];

if(a[4]*a[7]*m1+a[1]*a[7]*m2==a[1]*a[4]*m3&

a[1]!

=1&

a[4]!

a[7]!

=1)

{

s++;

printf("

(%2d)"

printf("

%ld/%d+%ld/"

m1,a[1],m2);

%d=%ld/%d"

a[4],m3,a[7]);

if(s%2==0)printf("

}

if(i<

9&

g==1)

i++;

a[i]=1;

continue;

while(a[i]==9&

i>

1)i--;

if(a[i]==9&

i==1)break;

elsea[i]++;

共以上%d个解。

\n"

9、编写程序实现整数762191754639820463中删除6个数字后,剩下的数字按原次序组成一个新的正整数,所得最大整数为多大?

//贪心删数字大最大

#include"

inti,k,t,m,n,x,a[10000];

charb[100000];

请输入整数:

%s"

for(n=0,i=0;

b[i]!

='

\0'

{n++;

a[i]=b[i]-48;

删除数字个数:

scanf("

k);

以上%d位整数中删除%d个数字分别为:

n,k);

t=0;

m=0;

x=0;

i=t+1;

while(x<

k&

=n)

{if(t>

=0&

a[t]<

a[i])

{printf("

%d,"

a[t]);

a[t]=-1;

while(t>

a[t]==-1)

t--;

x=x+1;

elset=i++;

printf("

\n删除后所得最大数:

for(i=0,x=0;

x<

n-k;

if(a[i]!

=-1)

{printf("

a[i]);

x++;

10、给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffmantree)。

有4个权值为{2,7,5,4}叶子节点,编写程序试构造一颗哈夫曼树。

11、已知6种物品和一个可容纳60重量的背包,物品i的重量为wi,产生的效益为pi。

在装包时物品i

可以装入,也可以不装,但不可拆开装。

即物品i可产生的效益为xi*pi,这里xi属于{0,1},c,wi,pi属于N+。

设计如何装包,所得装包总效益最大。

相关参数见下表

W1

15

P1

32

W2

17

P2

37

W3

20

P3

46

W4

12

P4

26

W5

9

P5

21

W6

14

P6

30

#defineN50

inti,j,c,cw,n,sw,sp,p[N],w[N],m[N][10*N];

inputn:

inputc:

c);

printf("

inputw%d,p%d:

i,i);

scanf("

w[i],&

p[i]);

for(j=0;

=c;

if(j>

=w[n])

m[n][j]=p[n];

else

m[n][j]=0;

for(i=n-1;

i>

i--)

for(j=0;

if(j>

=w[i]&

m[i+1][j]<

m[i+1][j-w[i]]+p[i])

m[i][j]=m[i+1][j-w[i]]+p[i];

else

m[i][j]=m[i+1][j];

cw=c;

printf("

c=%d\n"

c);

背包所

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1