算法实例综合复习卷.docx
- 文档编号:4058156
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:19
- 大小:345.48KB
算法实例综合复习卷.docx
《算法实例综合复习卷.docx》由会员分享,可在线阅读,更多相关《算法实例综合复习卷.docx(19页珍藏版)》请在冰豆网上搜索。
算法实例综合复习卷
算法实例综合复习卷
枚举算法实例:
枚举法:
列举出问题的所有可能解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。
一一列举,无一遗漏。
在很多时候,实现枚举算法的结构是循环结构嵌套分支结构。
实例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"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"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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 实例 综合 复习