VB经典试题.docx
- 文档编号:17912072
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:19
- 大小:22.47KB
VB经典试题.docx
《VB经典试题.docx》由会员分享,可在线阅读,更多相关《VB经典试题.docx(19页珍藏版)》请在冰点文库上搜索。
VB经典试题
VB经典问题
1、鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,求出公鸡、母鸡和小鸡的数量
PrivateSubCommand1_Click()
Dimi,j,k
Fori=0To20
Forj=0To33
k=100-i-j
IfkMod3=0Andi*5+j*3+k/3=100Then
Print"母鸡",j&"公鸡",i&"小鸡",k
EndIf
Nextj
Nexti
EndSub
2、水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
(例如:
1^3+5^3+3^3=153)
Fori=1To9
Forj=0To9
Fork=0To9
Ifi^3+j^3+k^3=i*100+j*10+kThen
Printi*100+j*10+k
EndIf
Nextk
Nextj
Nexti
3、淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。
韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。
韩信马上说出人数:
1049。
DimnAsInteger
Forn=1To1100
Do
If(nMod3=2)And(nMod5=4)And(nMod7=6)Then
Printn
ExitDo
EndIf
n=n+1
Loop
Nextn
4、①、普通年能被4整除且不能被100整除的为闰年。
②、世纪年能被400整除的是闰年。
(如2000年是闰年,1900年不是闰年)
DimyAsInteger
y=Int(Val(Text1.Text))
IfyMod4=0Then
IfyMod100=0Then
IfyMod400=0Then
Text2.Text=Text1.Text+"是闰年"
Else
Text2.Text=Text1.Text+"不是!
"
EndIf
Else
Text2.Text=Text1.Text+"是闰年!
"
EndIf
Else
Text2.Text=Text1.Text+"不是"
EndIf
5、分析:
求最大公约数的算法思想:
(最小公倍数=两个整数之积/最大公约数)
(1)对于已知两数m,n,使得m>n;
(2)m除以n得余数r;(3)若r=0,则n为求得的最大公约数,算法结束;否则执行(4);(4)m←n,n←r,再重复执行
(2)。
m=val(InputBox("m="))
n=Val(InputBox("n="))
P=n*m
Ifm t=m: m=n: n=t endif r=mmodn DoWhile(r<>0) m=n n=r r=mmodn Loop Print"最大公约数=",n Print"最小公倍数=",P/n 6、判断素数: 质数又称素数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。 m=val(InputBox("请输入一个数")) Fori=2Toint(sqr(m)) IfmModi=0ThenExitFor Nexti Ifi>int(sqr(m))Then Print"该数是素数" Else Print"该数不是素数" EndIf 7、四、验证哥德巴赫猜想 (任意一个大于等于6的偶数都可以分解为两个素数之和) 基本思想: n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。 如n1不是素数,就不必再检查n2是否素数。 先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。 然后使n1+2再检验n1、n2是否素数,…直到n1=n/2为止。 利用上面的prime函数,验证哥德巴赫猜想的程序代码如下: 哥德巴赫猜想: 在1742年给欧拉的信中哥德巴赫提出了以下猜想: 任一大于2的整数都可写成三个质数之和。 因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为: 任一大于5的整数都可写成三个质数之和。 欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。 今日常见的猜想陈述为欧拉的版本。 把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。 1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。 a)任一不小于6之偶数,都可以表示成两个奇质数之和;b)任一不小于9之奇数,都可以表示成三个奇质数之和。 Dimi,j,x,A,zAsInteger k: x=Val(InputBox("请输入一个数")) Ifx<6AndxMod2<>0Then GoTok Else Printx Fory=2Tox/2 z=x-y Fori=2Toy-1 IfyModi=0ThenExitFor Nexti Ifi>y-1Then Forj=2Toz-1 IfzModj=0ThenExitFor Nextj Ifj>z-1Then Printy;"+";z EndIf EndIf Nexty EndIf 8、五、排序问题 1.选择法排序(升序)基本思想: 1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置; 2)除第1个数外,其余n-1个数中选最小的数,与第2个数交换位置; 3)依次类推,选择了n-1次后,这个数列已按升序排列。 Dima(20)AsInteger ForI=1To5 a(I)=Val(InputBox("")) NextI Fork=1To5 Printa(k); Nextk ForI=1To5-1 t=I Forj=I+1To5 Ifa(t)>a(j)Thent=j Nextj temp=a(I)‘交换两个数的位置 a(I)=a(t) a(t)=temp NextI Print Fork=1To5 Printa(k); Nextk 2.冒泡法排序(升序)基本思想: (将相邻两个数比较,小的调到前头) 1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”; 2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数; 3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。 Dima(20)AsInteger Fori=1To5 a(i)=Val(InputBox("")) Nexti Fork=1To5 Printa(k); Nextk Fori=1To5-1 Forj=1To5-i Ifa(j)>a(j+1)Then temp=a(j) a(j)=a(j+1) a(j+1)=temp EndIf Nextj Nexti Print Fork=1To5 Printa(k); Nextk 3.合并法排序(将两个有序数组A、B合并成另一个有序的数组C,升序) 1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组; 2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完; 3)将另一个数组剩余元素抄入C数组,合并排序完成。 程序段如下: DoWhileia<=UBound(A)Andib<=UBound(B)'当A和B数组均未比较完 IfA(ia) C(ic)=A(ia): ia=ia+1 Else C(ic)=B(ib): ib=ib+1 EndIf ic=ic+1 Loop DoWhileia<=UBound(A)'A数组中的剩余元素抄入C数组 C(ic)=A(ia) ia=ia+1: ic=ic+1 Loop DoWhileib<=UBound(B)'B数组中的剩余元素抄入C数组 C(ic)=B(ib) ib=ib+1: ic=ic+1 Loop 六、查找问题 1.①顺序查找法(在一列数中查找某数x) 基本思想: 一列数放在数组a (1)---a(n)中,待查找的数放在x中,把x与a数组中的元素从头到尾一一进行比较查找。 用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a(p),则使p=p+1,不断重复这个过程;一旦x等于a(p)则退出循环;另外,如果p大于数组长度,循环也应该停止。 (这个过程可由下语句实现) p=1 DoWhilex<>a(p)Andp<=n p=p+1 Loop 下面写一查找函数Find,若找到则返回下标值,找不到返回0 OptionBase1 PrivateFunctionFind(a()AsSingle,xAsSingle)AsInteger Dimn%,p% n=Ubound(a) p=1 DoWhilex<>a(p)Andp<=n p=p+1 Loop Ifp>nthenp=0 Find=p EndFunction ②基本思想: 一列数放在数组a (1)---a(n)中,待查找的关键值为key,把key与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败。 (查找子过程如下。 index: 存放找到元素的下标。 ) PublicSubSearch(a()AsVariant,keyAsVariant,index%) Dimi% Fori=LBound(a)ToUBound(a) Ifkey=a(i)Then index=i ExitSub EndIf Nexti index=-1 EndSub 2.折半查找法(只能对有序数列进行查找) 基本思想: 设n个有序数(从小到大)存放在数组a (1)----a(n)中,要查找的数为x。 用变量bot、top、mid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下: (1)x=a(mid),则已找到退出循环,否则进行下面的判断;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 经典 试题