算法实例综合复习卷.docx

上传人:b****5 文档编号:4058156 上传时间:2022-11-27 格式:DOCX 页数:19 大小:345.48KB
下载 相关 举报
算法实例综合复习卷.docx_第1页
第1页 / 共19页
算法实例综合复习卷.docx_第2页
第2页 / 共19页
算法实例综合复习卷.docx_第3页
第3页 / 共19页
算法实例综合复习卷.docx_第4页
第4页 / 共19页
算法实例综合复习卷.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

算法实例综合复习卷.docx

《算法实例综合复习卷.docx》由会员分享,可在线阅读,更多相关《算法实例综合复习卷.docx(19页珍藏版)》请在冰豆网上搜索。

算法实例综合复习卷.docx

算法实例综合复习卷

算法实例综合复习卷

枚举算法实例:

枚举法:

列举出问题的所有可能解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。

一一列举,无一遗漏。

在很多时候,实现枚举算法的结构是循环结构嵌套分支结构。

实例1:

在1—1000这些自然数中找寻所有能被37整除的数,累加并输出结果。

PrivateSubForm_Load()

Show

Dimx,sAsInteger

s=0

Forx=1To1000

IfxMod37=0Then

s=s+x

EndIf

Nextx

Prints

EndSub

2、在1~1000这些自然数中算出所有被3和5除都余2的数有几个。

PrivateSubForm_Load()

Dimx,nAsInteger

Show

Print“1~1000之间被3和5除都余2的数:

"

n=0

Forx=1To1000

IfxMod5=2AndxMod3=2Then

n=n+1

EndIf

Nexti

Print"共有"&Str(n)&"个。

"

EndSub

3、若有一个三位数满足:

x=a3+b3+c3(其中a、b、c分别是该三位数的百位、十位和个位数字),则称该三位数为水仙花数。

请编程找出所有的水仙花数。

方法一:

方法一:

PrivateSubForm_Load()

Show

Dimx,a,b,cAsInteger

Forx=100To999

a=x\100

b=(xMod100)\10

c=xMod10

Ifx=a^3+b^3+c^3ThenPrintx

Nextx

EndSub

运行结果:

方法二:

方法二:

PrivateSubForm_Load()

Show

Dima,b,c,xAsInteger

Fora=1To9

Forb=0To9

Forc=0To9

x=a*100+b*10+c

Ifx=a^3+b^3+c^3ThenPrintx

Nextc

Nextb

Nexta

EndSub

4、一张单据上的5位数为1■■47,其中百位数和千位数已经模糊不清了,但直到这个5位数是57或67的倍数,请设计一个算法,输出所有可能的数据,并统计满足要求的数据个数。

5、一张单据上的5位数为1■4■7,其中十位数和千位数已经模糊不清了,但直到这个5位数是57或67的倍数,请设计一个算法,输出所有可能的数据,并统计满足要求的数据个数。

6、包装600个变形金刚,要求是:

包装的规格分别是:

小盒每盒12个,大盒每盒15个。

每种规格的盒数都不能为0。

请设计一个算法,输出所有可能的包装方案。

7、某班举行联欢活动,需要购买本子和笔作为奖品。

本子每本3元,笔每支2元,共有100元,那么本子和笔各买多少支?

(本子至少1本,笔至少1支)流程图略

PrivateSubForm_Load()

Show

Dima,b,c,d,nAsInteger

n=0

Fora=1To33

Forb=1To49

If3*a+2*b=100Then

Printa,b

n=n+1

EndIf

Nextb

Nexta

Print"共有"&Str(n)&"种方法"

EndSub

8、1000以内素数推算

通常我们称自然数n为素数,是指只有1和n本身才能整除它(1不是素数,2是最小的素数),即一个素数除了它本身外,不可能分解为其他自然数的乘积。

设计算法:

¢2~1000依次判断是否为素数,“是”输出并计数,“不是”继续下一个数的判断。

¢一一列举,无一遗漏,所以需要用枚举算法。

¢外层循环:

i的值1~1000

¢内层循环:

j的值2~(i-1),如果i能被j整除,不是素数,跳出内层循环,继续下一个数据的判断。

否则输出该素数。

¢如果需要将找到的素数累加,只要在此程序的基础上加上累加器即可。

方法一:

流程图:

方法一代码:

PrivateSubForm_Load()

Dimi,j,nAsInteger

n=0

Show

Fori=2To1000

Forj=2Toi-1

IfiModj=0Then

ExitFor

EndIf

Nextj

Ifj=iThen

Printi,

n=n+1

IfnMod5=0ThenPrint

EndIf

Nexti

Print

Print"1000以内的素数一共有";n;"个"

EndSub

 

方法二代码:

代码:

PrivateSubForm_Load()

Dimi,j,nAsInteger

DimbAsString

n=0

Show

Fori=2To1000

b="yes"

Forj=2Toi-1

IfiModj=0Then

b="no"

ExitFor

EndIf

Nextj

Ifb="yes"Then

Printi,

n=n+1

IfnMod5=0ThenPrint

EndIf

Nexti

Print

Print"1000以内的素数一共有";n;"个"

EndSub

 

方法二流程图:

例:

假设数组D有五个元素,请用冒泡排序的算法,将该数组按升序排列。

冒泡排序:

●是一种直接交换的排序技术。

●把待排序的n个元素的数组看成是垂直堆放的一列数据,从最下面的一个元素起,自下而上地比较相邻的两个元素中的数据,将较小的数换到上面的一个元素中。

重复这一过程,直到处理完最后两个元素中的数据,称为一遍加工。

●当第一遍加工完成时,最小的数据已经上升到第一个元素的位置。

然后对余下的n-1个元素重复上述处理过程,直至最后进行余下两个数据的比较和交换。

二、排序算法

Fori=1To4

Forj=5Toi+1Step-1

Ifd(j)

t=d(j)

d(j)=d(j-1)

d(j-1)=t

EndIf

Nextj

Nexti

Print"按从小到大顺序排列的结果为:

"

Fori=1To5

Print"d("&Str(i)&")=";d(i)

Nexti

 

三、查找算法

1、顺序查找:

在有五个元素的数组中查找数据key。

顺序查找就是在一组数组中,依次查找所需的数据,找到即停止查找并反馈找到的信息,如果找遍还没有找到则反馈没有找到的信息。

方法一:

Fori=1To5

Ifd(i)=keyThen

Print"找到,"&"d("&Str(i)&")="&Str(d(i))

ExitFor'跳出循环语句

EndIf

Nexti

Ifi>5ThenPrint"未找到"

i=1

r=0

DoWhilei<=5Andr=0

Ifd(i)=keyThen

r=i

Else

i=i+1

EndIf

Loop

Ifr<>0Then

Print"找到的数据是:

d("&Str(r)&")"

Else

Print"没找到"

EndIf

方法二:

2、对分查找:

在一个有11个数据升序数组中采用对分查找找寻所需的数据key。

对分查找是在一组有序的数中找到所需结果。

i=1

j=11

DoWhilei<=j

m=Int((i+j)/2)

Ifd(m)=keyThen

Print"查找结果:

找到,d("&Str(m)&")="&Str(d(m))

ExitDo

Else

Ifd(m)

i=m+1

Else

j=m-1

EndIf

EndIf

Loop

Ifi>jThenPrint"查找结果:

没找到"

如果数组是降序的,请将判断条件和i和j的变化做相应调整。

y

y

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

当前位置:首页 > 高等教育 > 艺术

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

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