版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
查找的2种算法:顺序查找和二分查找统计的算法:
用一个数组存放统计结果(称为统计数组),算法的关键是根据要统计的对象确定统计数组的下标算法填空顺序查找算法ForI=1to ifsearch(I)=xthenexitfornextI‘退出的两种情况Ifthen
‘找到,处理else
‘没找到,处理endif I<=ubound(search)Ubound(search)二分查找算法flg=False left=1 right=NMid=DoWhile
mid=(left+right)/2 IfX=S(mid)Then flag=True exitdo ElseIfX>S(mid)Then
Else
EndIfLoop (left+right)/2left<=rightleft=mid+1right=mid-1例6-12将一个数列中的重复数删除掉。(动态数组应用)86638488634删除重复数算法思想
第1轮:用a(1)依次和位于其后的所有数组元素比较,假设数组元素a(i)与a(1)相同,则将a(i)删除。删除a(i)的方法是将位于a(i)其后的数组元素依次前移,即用a(i+1)元素的值替换a(i)值,a(i+2)替换a(i+1)的值….直到a(n)替换a(n-1);然后继续用a(1)和a(i),a(i+1),a(i+2)…..a(n-1)(数组已删除一个元素了)。若有相同的数存在,使用相同的方法将其删除,直到a(1)和位于其后的所有元素都比较完。第2轮:用a(2)和位于其后的所有元素比较,方法同第1轮。依次类推直到a(n-1)和a(n)比较完,就完成了删除重复数。整个删除的过程,数组a是动态变化的。OptionExplicitOptionBase1Dima()AsIntegerPrivateSubCommand1_Click()DimnAsInteger,iAsIntegerText1=""Text2=""n=InputBox("输入N")ReDima(n)Fori=1Tona(i)=Int(10*Rnd)+1Text1=Text1&Str(a(i))NextiEndSub定义动态数组的大小,使用循环结构给数列赋值,并在text1中输出.因为两个按钮对同一个数组操作,所以数组定义为模块级例6-12代码解析PrivateSubCommand2_Click()DimubAsInteger,i%,j%,k%,n%Text2=""ub=UBound(a)n=1DoWhilen<ubi=n+1DoWhilei<=ub
Ifa(n)=a(i)Then
Forj=iToub-1a(j)=a(j+1)
Nextjub=ub-1ReDimPreservea(ub)Elsei=i+1
EndIfLoopn=n+1Loop如果a(i)等于a(n),则删除a(i).n为比较的轮数,初值为1数组a少了一个元素,长度减1,需要重定义且要保留原来的值i比n大1,代表n的后一个元素的下标如果不相等,接着和后面的数比。直到i=ub第1轮比较结束开始下一轮比较Forn=1ToubText2=Text2&Str(a(n))Nextn输出结果例6-13有15名学生按照已有的编号顺序围成一圈,1~3报数,凡报到3者出圈,并给他一个新的编号。最先出圈者新的编号为1,第二个出圈者新的编号为2,依次类推,直到所有的学生都重新编号。将学生的新老编号对应关系打印出来。123456789101112131415369121548132101117145123456789101112131415111111111111111123456789101112131415算法说明:
通过本例,介绍在编程时,如何使用数组元素的值和数组元素的下标来描述不同的对象。定义两个数组old_no和new_no.old_no数组元素的下标对应学生的老编号,元素的初值均为1,用来标识它所对应的学生是否出圈(1表示没出圈,0表示出圈).new_no数组元素的下标表示学生的新编号,数组元素的值是学生的老编号.重新编号的方法如下:
将数组old_no的数组元素依次逐个相加(报数处理),每当和为3时,则将该元素的值置为0(逢3出圈),并把它的下标值赋给new_no数组的第一个元素.OptionBase1PrivateSubCommand1_Click()Dimold_no(15)AsInteger,new_no(15)AsIntegerDimi%,idx%,count%Fori=1To15old_no(i)=1
Nextiidx=0
Fori=1To15count=0
DoWhilecount<3idx=idx+1Ifidx>15Thenidx=1count=old_no(idx)+countLoopold_no(idx)=0new_no(i)=idx
NextiFori=1To15Text1=Text1&Right(""&CStr(i),3)Text2=Text2&Right(""&CStr(new_no(i)),3)NextiEndSub
给old_no数组赋值,初值为
1,表示没有出圈Count表示和表达式中变量的值在改变Do循环条件表达式此时Idx出圈了,成为新编号用right函数控制输出格式报数输出结果15个新号例6-14:找出从1-9这9个数字中任取6个不同数字组成的素数算法说明:本例程序定义一个”标识”数组a,用数组元素的下标来表示0—9这10个数字.用数组元素的值来标识对应的数字是否被用过,如果数组元素的值为1,则表示对应的数字已用过;若为0,则表示未使用过,可以用来组数.PrivateSubCommand1_Click()Dima(0To9)AsInteger,i&,k%,j%,s$,n&
Fori=123456To987654Eraseaa(0)=1s=CStr(i)
Forj=1To6k=Val(Mid(s,j,1))Ifa(k)=0Thena(k)=1ElseExitForEndIf
NextjIfj>6Then
Forn=2ToSqr(i)IfiModn=0ThenExitFor
NextnIfn>Sqr(i)ThenList1.AddItemiEndIfEndIfNextiEndSub判断i是否是素数,若是则在list中添加i循环正常结束表示6位数都没有重复的,则i满足第一个条件初始化为0例6-5:随机生成10个两两互质的四位整数,并按从大到小的顺序存放到list中.分析程序:1)所谓两两互质是指任意两个数除了1以外没有其他的公约数,例13和17,而6和8就不互质.2)除第一个随机数以外,每当新生成一个4位的随机整数,都要验证这个数和前面的数(即列表项是否互质).若不互质则丢弃,否则插入到数组中.3)要求存放在list中,该控件有一个list属性可以当作数组看待.将求出的互质数放在该属性中.4)要求从大到小排序.拿它依次和各列表项比较,并将它插入到第一个比它小的列表项前面.生成10个互质数,不排序PrivateSubCommand1_Click()Dimp%,i%,idx%,j%List1.List(0)=Int(Rnd*(9999-1000))+1000Dop=Int(Rnd*(9999-1000))+1000Fori=0ToList1.ListCount-1Forj=2TopIfpModj=0AndList1.List(i)Modj=0ThenExitForEndIfNextjIfj<=pThenExitForNextiIfi>List1.ListCount-1ThenList1.AddItempEndIfLoopUntilList1.ListCount=10EndSub随机生成第1个4位数P是第2个随机数,要不要放List1中,需要判断若满足条件,说明P和List1中的项互质,则丢弃丢弃判断P和所有存在项是否互质判断P和1个存在项是否互质互质则添加P循环结束条件:有10个数时则结束PrivateSubCommand1_Click()Dimp%,i%,idx%,j%List1.List(0)=Int(Rnd*(9000))+1000
Dop=Int(Rnd*(9000))+1000
Fori=0ToList1.ListCount-1Forj=2TopIfpModj=0AndList1.List(i)Modj=0ThenExitForEndIf
Nextj
Ifj<=pThenExitForNextiIf
i>List1.ListCount-1Thenidx=0
DoWhilep<List1.List(idx)idx=idx+1Ifidx>List1.ListCount-1ThenExitDoLoopList1.AddItemp,idx
EndIf
LoopUntilList1.ListCount=10EndSub在第idx位置插入p有关数组的算法,除了上述几种排序和查找要记忆外,还有:1)求一维数组a(n)元素的和。
s=0fori=1tons=s+a(i)nexti2)求二维数组a(m,n)各元素的和s=0Fori=1tomforj=1tons=s+a(i,j)nextjNexti3)求二维数组a(m,n)周边元素的和S=0Fori=1tons=s+a(1,i)+a(m,i)Nextifori=2tom-1s=s+a(i,1)+a(i,n)Nextj4)求二维数组a(n,n)主对角线元素的和S=0Fori=1tons=s+a(i,i)Nexti5)求二维数组a(n,n)次对角线元素的和S=0Fori=1tons=s+a(i,n+1-i)Next第6章结束!作业:1.习题集(第11周一上课时交)2.第5章课后习题2-10(第12周一上课时交)3.第6章课后习题2-12(第13周一上课时交)上交文件包,一个题一个文件夹,发送至29569739@第五章循环作业p81T11)做循环的条件是a<=5;
循环体为
b=b+a*aa=a+1
第一趟循环:
因为a=1(<=5)
所以:b=0+1=1a=1+1=2(a是条件变量仍然<=5)所以做第2趟循环:
所以:b=1+4=5a=2+1=3(a仍然<=5)所以做第3趟循环:
所以:b=5+9=14a=3+1=4(a仍然<=5)所以做第4趟循环:
所以:b=14+16=30a=4+1=5(a仍然<=5)所以做第5趟循环:
所以:b=30+25=55a=5+1=6(a>5,此时结束循环,执行loop后面的语句)结果为6552)for语句为:fori=1to3;循环体为:ch=mid(ch,2*i-1,1)&left(ch,len(ch))printch第1趟循环:i=1ch=mid(“DEF”,1,1)&left(“DEF”,3)=“D”&”DEF”=“DDEF”NextI后,i=2第二趟循环:i=2ch=mid(“DDEF”,3,1)&left(“DDEF”,4)=“E”&”DDEF”=“EDDEF”NextI后,i=3第三趟循环:i=3ch=mid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国流感疫苗行业应用趋势及前景需求规模预测研究报告版
- 2025-2030中国胰岛素注射笔市场投资建议与前景经营风险咨询研究报告
- 2026华润集团校招题库及答案
- 东城施工方案报价(3篇)
- 2025年特种玻璃防弹性能市场前景报告
- 2026年智能升降桌项目商业计划书
- 2026年建筑信息模型(BIM)项目可行性研究报告
- 2026年元宇宙产业生态报告
- 椎管内麻醉的护理技术
- 初中AI编程教学中多传感器数据融合在智能家居控制中的应用课题报告教学研究课题报告
- QGDW11356-2022电网安全自动装置标准化设计规范
- 资源与运营管理-第一次形考任务-国开-参考资料
- (高清版)DBJ33∕T 1318-2024 建筑结构抗震性能化设计标准
- 施工亏损报告范文
- 2025年包头轻工职业技术学院单招综合素质考试题库附答案
- DB33-T 1406-2024 职务科技成果转化管理规范
- 七年级上学期数学备课组期末复习计划
- 病理检验技术(第3版)课件 第10章 细胞学检查技术
- 乡镇污泥处理应急预案
- 海上导管架安装监理细则
- 中医九种体质的养生课件模板
评论
0/150
提交评论