认证主体:宁夏凯米世纪网络科技有限公司
IP属地:宁夏
统一社会信用代码/组织机构代码
91640100MA774ECW4K
1、vb常用算法总结大全算法是对某个问题求解过程的描述算法是对某个问题求解过程的描述1.累加、连乘累加、连乘1100的5或7的倍数的和sum=0fori=1to100ifimod5=0orimod7=0thensum=sum+iendifnextiprintsum310的乘积t=1fori=3to10t=t*inextiprintt思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?vb常用算法总结大全例例求自然对数e的近似值,要求其误差小于0.00001,近似公式为:
2、该例题涉及两个问题:该例题涉及两个问题:(11)用循环结构求级数和的问题。本例根据某项值的精度来控制循环)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。的结束与否。(22)累加:)累加:e=e+te=e+t循环体外对累加和的变量清零循环体外对累加和的变量清零e=0e=0连乘:连乘:n=nn=n**ii循环体外对连乘积变量置循环体外对连乘积变量置11n=1n=1privatesubform_click()privatesubform_click()dimi%,n&,t!,e!dimi%,n&,t!,e!
3、e=0:n=1e=0:n=1e存放累加和、n存放阶乘i=0:t=1i=0:t=1i计数器、t第i项的值dowhilet0.00001dowhilet0.00001e=e+t:i=i+1e=e+t:i=i+1累加、连乘n=nn=n**i:t=1/ni:t=1/nlooploopprintprint计算了计算了;i;;i;项的和是项的和是;e;eendsubendsubm1i0ii!11i!1.!1.3!1!
4、211!11eivb常用算法总结大全2.求素数求素数判别某数判别某数m是否为素数最简单的方法是是否为素数最简单的方法是:对于对于m从从i=2,3,m-1判别判别m能否被能否被i整除,只要整除,只要有一个能整除,有一个能整除,m不是素数,否则不是素数,否则m是素数。是素数。form=2to100fori=2tom-1if(mmodi)=0thenexitfornextiifim-1thenmsgboxstr(m)+”是素数是素数”elsemsgboxstr(m)+”不是素数不是素数”endifnextmm是否为素数
5、求100以内的素数vb常用算法总结大全3.穷举法穷举法“穷举法穷举法”也称为也称为“枚举法枚举法”或或“试凑法试凑法”,即将可能出即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。实现。例百元买百鸡问题。假定小鸡每只例百元买百鸡问题。假定小鸡每只5角角,公鸡每只公鸡每只2元,母鸡每元,母鸡每只只3元。现在有元。现在有100元钱要求买元钱要求买100只鸡,编程列出所有可能的只鸡,编程列出所有可能的购鸡方案。购鸡方案。设母鸡、公鸡、小鸡各为设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方只,根据题目要求,列出方
6、程为:程为:x+y+y=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。三个未知数,两个方程,此题有若干个解。解决此类问题采用解决此类问题采用“试凑法试凑法”,把每一种情况都考虑到。,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。vb常用算法总结大全方法一:方法一:privatesubform_click()dimx%,y%,z%forx=0to100fory=0to100forz
7、=0to100ifx+y+z=100and3*x+2*y+.5*z=100thenprintx,y,zendifnextznextynextxendsub方法二:方法二:forx=0to33fory=0to50z=100-x-yif3*x+2*y+.5*z=100thenprintx,y,zendifnextynextxvb常用算法总结大全4.递推法递推法“递推法递推法”又称为又称为“迭代法迭代法”,其基本思想是把一个复杂的计,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上算过程转化为简
8、单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。递推出新值,并由新值代替旧值。例例猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第存桃子的一半零一个,到第77天早上要吃时只剩下一个了,问小猴天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子?那天共摘下了多少个桃子?分析分析:这是一个:这是一个“递推递推”问题,先从最后一天推出倒数第二天的问题,先从最后一天推出倒数第二
9、天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子桃子,再从倒数第二天的桃子推出倒数第三天的桃子。设第设第n天的桃子为天的桃子为xn,那么它前一天的桃子数是,那么它前一天的桃子数是xn-1。2)1(12111nnnnxxxx也就是:即:vb常用算法总结大全已知:当已知:当n=7第第7天的桃子数为天的桃子数为1,则第,则第6天的桃子数由公式得天的桃子数由公式得4个,依次类推,可求得第个,依次类推,可求得第1天的桃子数。天的桃子数。程序如下:程序如下:privatesubform_click()dimiasintegerx=1print“第第7天的桃子数为:天的桃子数为:1只
10、只”fori=6to1step1x=(x+1)*2print“第第”;i;”天的桃子数为:天的桃子数为:”;x;”只只”nextiendsubvb常用算法总结大全5.最小、最大值最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随
11、机产生例随机产生1010个个100100200200之间的数,求最大值。之间的数,求最大值。privatesubcommand1_click()max=100fori=1to10x=int(rnd*101)+100printx;ifxmaxthenmax=xnextiprintprint最大值最大值=;maxendsubvb常用算法总结大全6、求最大公约数、求最大公约数privatesubcommand1_click()dimm,n,raslongm=val(text1.text)取数据取数据mn=
12、val(text2.text)取数据取数据nifmint(m)orm1ornint(n)orn1thentext3.text=数据错误!数据错误!elsedo求最大公约数求最大公约数r=mmodnm=nn=rloopuntilr=0text3.text=cstr(m)输出最大公约数输出最大公约数endifendsub判断数据是否合法判断数据是否合法vb常用算法总结大全privatesubform_click()fori=1to9forj=1to9printi;*;j;=
13、;i*j;nextjprintnextiendsub执行本程序,窗体上将显示九九乘法表。forj=1toi7、关于循环嵌套、关于循环嵌套(一个循环体内又包含了一个一个循环体内又包含了一个完整的循环结构称为循环的嵌套完整的循环结构称为循环的嵌套.)换行!换行!作用作用例:xh2.vbpssfrm.frmvb常用算法总结大全思考:打印上三角或下三角程序如何改动?要打印下思考:打印上三角或下三角程序如何改动?要打印下三角三角8.打印图形打印图形见下页见下页编写程序打印如右边图形:privatesubform_click()fori=1to4prin
14、tspace(5-i);forj=1to2*i-1print*;nextjprintnextiprintendsub********外循环用来控制输出外循环用来控制输出的行数及每行第一个的行数及每行第一个字符的输出位置字符的输出位置内循环用来控制每行内循环用来控制每行输出的字符个数。输出的字符个数。例:xh2.vbpshjs.frmvb常用算法总结大全9.判断同构数判断同构数(复习材料p39第7题)10.找亲密对数找亲密对数p111例5-1011.判断完数判断完数实验p55实验7-212.计算多项式计算多项式的和的和实
15、验p51实验6-313.求一个正整数求一个正整数k的各位数字之和的各位数字之和复习材料p334.4练习题第1题14.报数问题报数问题p114例5-1215.判断回文数判断回文数复习材料p41第10题或p81习题4vb常用算法总结大全16.求自然数的因子求自然数的因子p81习题5privatesubcommand1_click()dimaasinteger,i%a=inputbox(输入一个自然数)label1.caption=str(a)+的所有因子:fori=1toa-1ifamodi=0thenlist1.ad
18、输出方阵输出方阵sc中的下三角元素中的下三角元素fori=0to4forj=0toij=0to4则输出整个数组则输出整个数组sc(i,j)=i*5+jprintsc(i,j);;nextjprint换行换行nextivb常用算法总结大全fori=1to152t=a(i)a(i)=a(10-i+1)a(10-i+1)=tnextivb常用算法总结大全p115习题习题3:求二维数组每行的和数与每列的和数,:求二维数组每行的和数与每列的和数,数组元素为数组元素为19之间的随机数。之间的随机数。optionexplic
19、itoptionbase1生成数组生成数组privatesubcommand1_click()fori=1to4forj=1to5a(i,j)=int(9*rnd)+1picture1.printa(i,j);nextjpicture1.printnextiendsub求列和求列和privatesubcommand2_click()forj=1to5l(j)=0fori=1to4l(j)=l(j)+a(i,j)nextitext2=text2&str(l(j)
20、nextjendsubvb常用算法总结大全privatesubcommand3_click()fori=1to4h(i)=0forj=1to5h(i)=h(i)+a(i,j)nextjtext1=text1&str(h(i)&vbcrlfnextiendsub清除图片框和文本框清除图片框和文本框privatesubcommand4_click()picture1.clstext1=text2=endsub求行和求行和vb常用算法总结大全optionexplicitoptionexpl
21、icitoptionbase1optionbase1privatesubform_click()privatesubform_click()dimdimx%(5,5),y%(5,5),x%(5,5),y%(5,5),z%(5,5)z%(5,5)fori=1to5fori=1to5forj=1to5forj=1to5x(i,j)=int(100x(i,j)=int(100**rnd)+1rnd)+1y(i,j)=int(100y(i,j)=int(100**rnd)+1rnd)+1nextjnextjnextinextifori
22、=1to5fori=1to5forj=1to5forj=1to5z(i,j)=x(i,j)z(i,j)=x(i,j)y(i,j)y(i,j)nextjnextjnextinexti存放结果数组也必须定义vb常用算法总结大全fori=1to5fori=1to5forj=1to5forj=1to5printz(i,j);printz(i,j);nextjnextjprintprintnextinextiendsubendsub除法:除法操作必须先判别分母不为零,然后再进行对应元素的除法操作。vb常用算法总结
23、大全optionbase1optionbase1privatesubform_click()privatesubform_click()dimdimx%(4,5),s%(4),sum%x%(4,5),s%(4),sum%fori=1to4fori=1to4s(i)=0s(i)=0forj=1to5forj=1to5x(i,j)=ix(i,j)=inextjnextjnextinextiforj=1to5forj=1to5s(1)=s(1)+x(1,j)s(1)=s(1)+x(1,j)s(4)=s(4)+x(4,j)
24、s(4)=s(4)+x(4,j)nextjnextjfori=2to3fori=2to3s(2)=s(2)+x(i,1)s(2)=s(2)+x(i,1)s(3)=s(3)+x(i,5)s(3)=s(3)+x(i,5)nextinextifori=1to4fori=1to4sum=sum+s(i)sum=sum+s(i)nextinextiprintsumprintsumendsubendsubvb常用算法总结大全optionbase1optionbase1privatesubform_click()privatesu
25、bform_click()dimdimx%(4,4),s1&,s2&x%(4,4),s1&,s2&s=1:s2=1s=1:s2=1fori=1to4fori=1to4forj=1to4forj=1to4x(i,j)=ix(i,j)=inextjnextjnextinextifori=1to4fori=1to4s1=s1s1=s1**x(i,i)x(i,i)nextinextiprintsprintsendsubendsub若为“+”,则为对角线的和,但s1,s2初值为0fori=
26、1to4forj=1to4ifi+j=5thens2=s2+a(i,i)endifnextjnextitext3=“两条对角线的积两条对角线的积_分别是:分别是:&s1&&s2endsubvb常用算法总结大全9.求求二二维维数数组组中中每每行行/列列元元素素的的最最大大/最最小小optionexplicitoptionbase1privatesubform_click()dima%(5,8),i%,j%dimmaxi%(5),maxj%(8)fori=1to
27、5forj=1to8a(i,j)=int(90*rnd)+10printa(i,j);nextjprintnextifori=1to5maxi(i)=a(i,1)forj=1to8ifmaxi(i)a(i,j)thenmaxi(i)=a(i,j)nextjprint第第;i;行的最大值是行的最大值是:;maxi(i),nextiprint生成数组并输出求每行最大并输出vb常用算法总结大全9.求求二二维维数数组组中中每每行行/列列元元素素的的最最大大/最最小小forj=1
28、to8maxj(j)=a(1,j)fori=1to5ifmaxj(j)a(i,j)thenmaxj(j)=a(i,j)nextiprint第第;j;列的最大值是列的最大值是:;maxj(j),ifjmod5=0thenprintnextjendsub求每列最大并输出vb常用算法总结大全10求求鞍鞍点点元元素素,该该元元素素所所在在行行为为最最大大,所所在在列列为为最最小小p115习题习题7生成数组生成数组privatesubcommand1_click()dimi%,j%m=inputbox(请输入
29、数组的行数请输入数组的行数)n=inputbox(请输入数组的列数请输入数组的列数)redima(m,n)fori=1tomforj=1tona(i,j)=int(90*rnd)+10picture1.printa(i,j);nextjpicture1.printnextiendsubvb常用算法总结大全10求求鞍鞍点点元元素素,该该元元素素所所在在行行为为最最大大,所所在在列列为为最最小小p115习题习题7找鞍点数找鞍点数privatesubcommand2_click()dimi%,j%,max%,col
30、%,flg%fori=1tommax=a(i,1)col=1forj=2tonifmaxa(j,col)thenexitfornextjifjnthentext1.text=鞍点元素是鞍点元素是&a(&i&,&col&)=&a(i,col)flg=1endififflg=0thentext1=鞍点元素不存在鞍点元素不存在nextiendsub找每行最大值,并记下最在值所在的列将该行最大值,与所在列的各元素比较,是否为该
31、列最小vb常用算法总结大全***************************=&&&&&&&&&xyzoptionbase1optionbase1privatesubform_click()privatesubform_click()dimdimxx%(4,5),y%(5,3),z%(4,3)%(4,5),y%(5,3),z%(4,3)fori=1to4fori=1to4forj=1to5forj=1to5x
32、(i,j)=int(100x(i,j)=int(100**rnd)+1rnd)+1printx(i,j);printx(i,j);nextjnextjprintprintnextinextifori=1to5fori=1to5forj=1to3forj=1to3y(i,j)=int(100y(i,j)=int(100**rnd)+1rnd)+1printy(i,j)printy(i,j)nextjnextjprintprintnextinextivb常用算法总结大全*******************
33、********=&&&&&&&&&xyzforl=1to4forl=1to4forj=1to3forj=1to3z(l,j)=0.0z(l,j)=0.0fori=1to5fori=1to5z(l,j)=z(l,j)+x(l,i)z(l,j)=z(l,j)+x(l,i)**y(i,j)y(i,j)nextinextinextjnextjnextlnextlfori=1to4fori=1to4forj=1
34、to3forj=1to3printz(i,j);printz(i,j);nextjnextjprintprintnextinextiendsubendsubvb常用算法总结大全optionexplicitoptionbase1dima()asinteger,b()asinteger,n%privatesubcommand1_click()生成数组生成数组dimi%,j%n=inputbox()redima(n,n)fori=1tonforj=1tona(i,j)=int(rnd*100)
35、+1text1=text1&str(a(i,j)nextjtext1=text1&vbcrlfnextiendsubvb常用算法总结大全privatesubcommand2_click()成成矩阵转置矩阵转置dimi%,j%redimb(n,n)fori=1tonforj=1tonb(j,i)=a(i,j)nextjnextifori=1tonforj=1tontext2=text2&str(b(i,j)nextjtext2=te
36、xt2&vbcrlfnextiendsubvb常用算法总结大全原始数据869327a(1)a(2)a(3)a(4)a(5)a(6)第1趟交换后269387a(2)a(3)a(4)a(5)a(6)第2趟交换后239687a(3)a(4)a(5)a(6)第3趟交换后236987a(4)a(5)a(6)第4趟交换后236789a(5)a(6)第5趟无交换236789图1.3.25排序过程示意图对已知存放在数组中的
37、对已知存放在数组中的n个数,用个数,用选择法选择法按递增顺序排序。按递增顺序排序。(1)从从n个数的序列中选出最小的数个数的序列中选出最小的数(递增递增),与第与第1个数交换位个数交换位置置;(2)除第除第1个数外,其余个数外,其余n-1个数再按个数再按(1)的方法选出次小的数的方法选出次小的数,与第,与第2个数交换位置个数交换位置;(3)重复重复(1)n-1遍,最后构成递增序列。遍,最后构成递增序列。vb常用算法总结大全privatesubcommand1_click()dimsort(10)asinteger,temp%dimiasinteger,j%ra
38、ndomizefori=1to10sort(i)=int(rnd*99)+1text1=text1&str(sort(i)nextifori=1to9forj=i+1to10ifsort(i)sort(j)thentemp=sort(i)sort(i)=sort(j)sort(j)=tempendifnextjtext2=text2&str(sort(i)nextitext2=text2&str(sort(i)书上少此语句书上少此语句ends
39、ubvb常用算法总结大全14.冒泡法排序冒泡法排序实验实验p62,实验实验7-4与选择排序的区别在于:只对相邻两数进行比较,使之大数沉底,小数象气泡一样“冒”上来,所以称为“冒泡法”。例如对8,3,5,2,1,9排序:第一轮的排序是第1次比较:8,3,5,2,1,9第2次比较:3,8,5,2,1,9第3次比较:3,5,8,2,1,9第4次比较:3,5,2,8,1,9第5次比较:3,5,2,1,8,9第6次比较:3,5,2,1,8,9第一轮的排序结果;3,5,2,1,8,9第一轮需排序5次,第二轮需排序4次,第三轮需排序3次,第四轮需排序2次,第五轮需排序1次。vb常用算法总结大全privat
40、esubcommand1_click()冒泡法排序过程冒泡法排序过程dimi%,j%,temp%fori=1toubound(a)-1forj=1toubound(a)-iifa(j)a(j+1)thentemp=a(j):a(j)=a(j+1):a(j+1)=tempendifnextnextfori=1toubound(a)printa(i);nextiendsubvb常用算法总结大全例:例:排序运动员的成绩排序运动员的成绩l已知8名运动员100米成绩,请排出他们的名次(成绩相
41、同名次相同,成绩由键盘输入)vb常用算法总结大全l本题的难点本题的难点并不在排序,可以很轻松地用冒并不在排序,可以很轻松地用冒泡法或选择法排序进行成绩从小(快)到大泡法或选择法排序进行成绩从小(快)到大(慢)的排列。问题是排序后的成绩对应于哪(慢)的排列。问题是排序后的成绩对应于哪一个运动员,一维数组是无法记录的。因此就一个运动员,一维数组是无法记录的。因此就要定义一个二维数组,其中第一列放运动员的要定义一个二维数组,其中第一列放运动员的成绩,第二列存放成绩对应的运动员号。按二成绩,第二列存放成绩对应的运动员号。按二维数组的第一列排序后,产生交换不仅要交换维数组的第一列排序后,产生交换不仅要交
42、换第一列的数组元素,还要交换第二列的数组元第一列的数组元素,还要交换第二列的数组元素,这样运动员的编号就能跟着成绩素,这样运动员的编号就能跟着成绩“跑了跑了”。在输出名次时,也要注意成绩相同、名次相同在输出名次时,也要注意成绩相同、名次相同的问题。的问题。vb常用算法总结大全排序过程(选择法排序)排序过程(选择法排序)privatesubsort(cj()assingle)dimtempassinglefori=1to7forj=i+1to8ifcj(i,1)cj(j,1)thentemp=cj(i,1):cj(i,1)=
43、cj(j,1):cj(j,1)=temptemp=cj(i,2):cj(i,2)=cj(j,2):cj(j,2)=tempendifnextnextendsubvb常用算法总结大全输出名次过程输出名次过程privatesuboutput(cj()assingle)dimjasinteger,pasintegerp=1print第第;1;名是名是;cj(1,2);号运动员,成绩是号运动员,成绩是:;cj(1,1)forj=2to8ifcj(j,1)=cj(j-1,1)then
44、print第第;p;名是名是;cj(j,2);号运动员,成绩是号运动员,成绩是:;cj(j,1)elseprint第第;j;名是名是;cj(j,2);号运动员,成绩是号运动员,成绩是:;cj(j,1)p=jendifnextprintendsubvb常用算法总结大全窗体事件过程窗体事件过程输入运动员成绩输入运动员成绩privatesubform_click()dimiasintegerdimproasstring,cj(8,2)assinglerandomizefori=1to8pro=请输入
45、第请输入第+str(i)+位运动员的成绩:位运动员的成绩:cj(i,1)=inputbox(pro)cj(i,2)=iprintcj(i,1);nextprintprintcallsort(cj)calloutput(cj)endsubvb常用算法总结大全(1)插入插入排序排序复习材料复习材料p50第第23在有序数组在有序数组a(1ton)(原有原有n-1个元素个元素)插入一个值插入一个值key元素元素,算法算法:查找要插入的位置查找要插入的位置k(1=k=n-1),腾出位置腾出位置,把最后一个元把最后一个元素开始到第素开始到第
46、k个元素往后移动一个位置个元素往后移动一个位置,第第k个元素的位置腾出个元素的位置腾出,就可将数据,就可将数据key插入插入14710131619222514kvb常用算法总结大全privatesubcommand1_clickdima%(11),i%,j%,x%fori=1to10a(i)=i*5+1通过程序自动生成有规律的数组通过程序自动生成有规律的数组nextix=inputbox(“输入任意数输入任意数x:”)fori=1to10查找欲插入数查找欲插入数x在数组中的位置在数组中的位置ifxa(i)thenexitfor找到插入的位置下标
49、择、冒泡、插入法排序及合并排序等。排序法有:选择、冒泡、插入法排序及合并排序等。前两种排序欲排序的数据全部输入后,再进行排序;前两种排序欲排序的数据全部输入后,再进行排序;插入法排序插入法排序每输入一项,马上插入到数组应在的位置,数组每输入一项,马上插入到数组应在的位置,数组始终有序。用插入排序法输入不多于始终有序。用插入排序法输入不多于2020个数,使数组保持递增个数,使数组保持递增的序列。对数组中已有的序列。对数组中已有n-1n-1个有序数,当输入某数个有序数,当输入某数xx时,插入排时,插入排序法实现的步骤:序法实现的步骤:(1)(1)输入欲排序的数据项输入欲排序的数据项xx;
50、在数组;在数组aa中找中找xx应所处的位置应所处的位置j;j;(2)(2)从数组的最后一个元素开始到下标从数组的最后一个元素开始到下标jj依次往后移,使依次往后移,使jj位位置空出;置空出;(3)(3)将将xx放入位置放入位置jj处,一个数据插入完成;处,一个数据插入完成;(4)(4)有若干个数重复有若干个数重复(1)(1)(3)(3)。对于若干个数输入,只要调用插入排序过程即可。对于若干个数输入,只要调用插入排序过程即可。vb常用算法总结大全dimnasintegersubinsert(a()assingle,byvalx!)dimi%,j%j=
51、1dowhileja(j)j=j+1loopfori=n-1tojstep-1a(i+1)=a(i)nextia(j)=xendsubvb常用算法总结大全privatesubtext1_keypress(keyasciiasinteger)staticbb!(1to20)dimi%ifn=20thenmsgbox数据太多数据太多!,1,警告警告endendififkeyascii=13thenn=n+1callinsert(bb(),val(text1)pic
52、ture1.printtext1fori=1tonpicture2.printbb(i);nextipicture2.printtext1=endifendsubvb常用算法总结大全l从键盘读取数组从键盘读取数组a和和b(各各5个元素),个元素),a,b都是严格递增的(即元素从小到大排列,都是严格递增的(即元素从小到大排列,且无重复元素),将且无重复元素),将a,b合并成合并成c数组,使数组,使c也严格递增。也严格递增。l若若a,b中有相同的元素只保留一个,最后中有相同的元素只保留一个,最后输出数组输出数组c。编写通用过程。编写通用过程output,在窗在窗体
53、上打印数组。体上打印数组。vb常用算法总结大全optionexplicitdima(5)asinteger,b(5)asinteger,c()asintegerprivatesuboutput(d()asinteger)输出数组的通用过程输出数组的通用过程dimiasintegerfori=1toubound(d)printd(i);nextiprintendsubvb常用算法总结大全privatesubcommand1_click()数组输入数组输入dimiasintegerfori=1to5a(i)=i
54、nputbox(“输入数组输入数组a(“+str(i)+”)”)nextiprint数组数组a:calloutput(a)fori=1to5b(i)=inputbox(“输入数组输入数组b(“+str(i)+”)”)nextiprint数组数组b:calloutput(b)endsubvb常用算法总结大全privatesubcommand2_click()数组合并输出数组合并输出dimpasinteger,qasinteger,rasintegerdimiasintegerp=1:q=1:r=1do
55、whilep5andqb(q)thenc(r)=b(q)r=r+1q=q+1elseifa(p)b(q)thenc(r)=a(p)r=r+1:p=p+1elsec(r)=a(p)r=r+1:p=p+1:q=q+1endifloopvb常用算法总结大全ifp=5thenredimpreservec(r)fori=q+1to5c(r)=b(i):r=r+1nextiendififq=5thenredimpreser
56、vec(r)fori=p+1to5c(r)=a(i):r=r+1nextiendifcalloutput(c)endsubvb常用算法总结大全(11)..顺序查找顺序查找p104p104例例5-45-4顺序捡索顺序捡索捡索捡索(search)(search):又称为查找,就是从又称为查找,就是从一组数据中找出所需的具有某种特征的数一组数据中找出所需的具有某种特征的数据项。据项。它是数据处理中应用很广泛的一种操它是数据处理中应用很广泛的一种操作,最简单的检索方法是作,最简单的检索方法是顺序捡索顺序捡索。其方。其方法是从一组数据的第一项
57、开始逐个比较,法是从一组数据的第一项开始逐个比较,直到找到该数据项,或全部数据都比较完直到找到该数据项,或全部数据都比较完也没找到该数据为止。也没找到该数据为止。optionexplicitoptionexplicitprivatesubform_click()privatesubform_click()dimsearch(10)asinteger,iasintegerdimsearch(10)asinteger,iasintegerdimsasintegerdimsasintegerfori=1to10fori=1
58、to10search(i)=int(rndsearch(i)=int(rnd**100)+1100)+1printsearch(i)printsearch(i)nextinextis=val(inputbox(s=val(inputbox(输入要查找的数输入要查找的数)fori=1to10fori=1to10ifsearch(i)=sthenexitforifsearch(i)=sthenexitfornextinextiifi=10thenifi=10th
59、enprintprint要找的数是要找的数是search(;i;)search(;i;)elseelseprintprint没找到没找到!endifendifendsubendsub(22)二分查找)二分查找p106p106例例5-55-5其方法是:其方法是:1)1)、找出中间位置、找出中间位置midmid,判断查找数椐,判断查找数椐kk与与a(mid)a(mid)是否相等,若相等则已找到。是否相等,若相等则已找到。(2)(2)、如果、如果kka(mid)a(mid)则表明则表明kk可能在可能在a(mid)a(mid)与与a(bot)a(
60、bot)区间内,因此重新设置:区间内,因此重新设置:toptopmidmid11(3)(3)、如果、如果kka(mid)a(mid)则表明则表明kk可能在可能在a(top)a(top)与与a(mid)a(mid)区间内,因此重新设置:区间内,因此重新设置:botbotmidmid11重复以上步骤,每次查找区间减少一半,如此重复以上步骤,每次查找区间减少一半,如此反复,其结果是查到此数,或查不到此数。反复,其结果是查到此数,或查不到此数。privatesubcmdprivatesubcmd生成数组生成数组_click()_click()dimvasvariantdimvasvariantsearch=array(12,17,23,28,30,39,_search=array(12,17,23,28,30,39,_41,46,57,61,78,83,85,89,93)41,46,57,61,78,83,85,89,93)foreachvinsearchforeach