资源描述:
《vb常用算法4 递推穷举积分》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、VB常用算法----递推与穷举一、初等数学1、递推法又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。问题:猴子吃桃子小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个…..;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子?分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数………..设第n天桃子数为xn,前一天桃子数是:xn-1,则有关系:xn=xn-1/2-1或xn-1=(xn+1)*2程序如下:Priv
2、ateSubCommand1_Click()Dimn%,i%,x%x=1'第七天桃子数Print"第七天桃子数:1只"Fori=6To1Step-1x=(x+1)*2Print"第"&i&"天桃子数:"&x&"只"NextiEndSub 2、穷举法又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。问题:百元买百鸡问题。假定小鸡每只5角;公鸡每只2元;母鸡每只3元。现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。分析:设母鸡、公鸡、小鸡分别x、y、z只,则有:x+y+z=1003x+2y+0.5z=100程序一:Priv
3、ateSubCommand1_Click()Dimx%,y%,z%Print"百钱买百鸡问题的各种购买方案"Print"母鸡数公鸡数小鸡数"Forx=0To100Fory=0To100Forz=0To100Ifx+y+z=100And3*x+2*y+0.5*z=100ThenPrintx,y,zEndIfNextzNextyNextxEndSub程序二(优化)PrivateSubCommand2_Click()Dimx%,y%Print"百钱买百鸡问题的各种购买方案"Print"母鸡数公鸡数小鸡数"Forx=0To33Fory=0To50If3*x+2*
4、y+0.5*(100-x-y)=100ThenPrintx,y,100-x-yEndIfNextyNextxEndSub二、高等数学求积分近似计算积分:s=∫13(x3+2x+5)dx 分析:矩形法数值积分的思想是,将积分区间划分为n个等分,以函数y=f(x)曲线和坐标轴x上的取值a,b为上下边界,以n个小矩形的面积Si近似小曲边型面积,则所求定积分值近似为:将积分区间n等分以后其小区间长度为h=(b-a)/n,其中a与b为积分下、上限,则:S1=f(a)*h,S2=f(a+h)*h,S3=f(a+2*h)*h,…,Sn=f(a+(n-1)*h)*h因
5、为在计算小矩形面积时要多次计算函数f(x),所以将被积函数编写为函数过程。代码如下:PublicFunctionf(ByValx!)AsSingle'被积函数f=x*(x*x+2)+5EndFunctionPublicFunctiontrapez(ByVala!,ByValb!,ByValn%)AsSingle'b、a分别为积分上下限,n为等分数Dimsum!,h!,x!DimiAsIntegerh=(b-a)/nsum=f(a)*hFori=1Ton-1x=a+i*hsum=sum+f(x)*hNextitrapez=sumEndFunction调用:
6、PrivateSubCommand1_Click()Printtrapez(1,3,30)EndSub数论综合题此类题目比较广泛,必须给以足够重视。历年题目有:平方数、拟互满数、回文数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。三、实战练习1、 完善程序填空题(2002秋二(10))找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框List1中。OptionExplicitOptionExplicitPrivateSubCommand1_Click()DimIAsLong,nAsLongForI=11To300(1)IfVeri
7、fy(n)Then(2)EndIfNextIEndSubPrivateFunctionVerify((3))AsBooleanDimA(0To9)AsInteger,IAsInteger,JsAsIntegerDoWhilen<>0(4)n=n10LoopForI=0To9Js=Js+A(I)NextI(5)EndFunction 2、编程题(2004秋上机试卷08)一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。例如,12^2=144,21^2=441,12与21互逆,144与441互逆,12就是奇妙平方数。找出1-
8、300以内所有的奇妙平方数。