算法实例.docx
《算法实例.docx》由会员分享,可在线阅读,更多相关《算法实例.docx(15页珍藏版)》请在冰豆网上搜索。
![算法实例.docx](https://file1.bdocx.com/fileroot1/2023-7/8/23d2bcf2-d15f-42e7-8b1e-94fec04daf66/23d2bcf2-d15f-42e7-8b1e-94fec04daf661.gif)
算法实例
解析法:
数列问题
*用循环结构实现y=xn(n>=0)(x为整数),写出流程图。
N=inputbox(“”)
X=inputbox(“”)
Y=1
Ifn>=0then
I=1
Dowhilei<=n
Y=y*x
I=i+1
Loop
Printy
else
print“error”
endif
*s=1+3+5+7+……+n,
(1)求前20项的和
(2)求当累加到第几项时,s的值刚好超过100?
(3)求第30项的值
(4)求累加到第几项时,s的值刚好不超过300?
(1)
I=1
S=0
Dowhilei<=20
S=s+(2*i-1)
I=i+1
Loop
Prints
(2)
I=1
S=0
Dowhiles<=100
S=s+(2*i-1)
I=i+1
Loop
Printi-1
(3)
I=1
S=0
Dowhilei<=30
T=2*i-1
S=s+t
I=i+1
Loop
Printt
(4)
I=0
S=0
do
S=s+(2*i-1)
I=i+1
Loopuntils>=300
Printi-1
*求1!
+2!
+3!
+4!
+…+20!
方法1:
S=1
Fori=2to20
T=1
forj=2toi
t=t*j
nextj
s=s+t
nexti
prints
方法2:
N=inputbox(“”)
S=0
T=1
A=1
Dowhilea<=n
T=t*a
S=s+t
A=a+1
Loop
Prints
*求斐波纳奇数列的第n项
N=inputbox(“”)
Ifn<3then
Print1
Else
A=1:
b=1:
c=2:
k=3
Ifn=3then
Print2
else
Dowhilek<=n
A=b
B=c
C=a+b
K=k+1
Loop
Printc
endif
endif
*计算圆周率
N=inputbox(“”)
I=1:
s=1:
x=2:
y=1
Dowhilei<=n
S=s*(x/y)
I=i+1
IfImod2<>0then
X=x+2
Else
Y=y+2
Endif
Loop
Prints*2
*求a,b(a>b)两数的最大公约数和最小公倍数
A=inputbox(“”)
B=inputbox(“”)
X=a
Y=b
Do
R=amodb
A=b
B=r
Loopuntilb=0
Print“最大公约数是”;a
S=(x/a)*(y/a)*a
Print“最小公倍数是”;s
枚举算法
*《孙子算经》鸡兔同笼问题:
有35个头,94只脚,问鸡兔各有几只?
X+y=35
2x+4y=94
X=1
Dowhilex<=35
If2*x+(35-x)*4=94then
Printx,35-x
Endif
X=x+1
Loop
*涂抹单据1:
一张单据上有一个5位数的编号,万位数是1,十位数是4,个位数是7,千位数和百位数已经模糊不清,只知道该5位数是57或67的倍数,找出所有满足这些条件的5位数并输出。
1**47
Forj=0To99
n=10047+j*1000
IfnMod57=0OrnMod67=0Then
Printn
EndIf
Nextj
*涂抹单据2:
一张单据上有一个5位数的编号,万位数是1,百位数是4,个位数是7,千位数和十位数已经模糊不清,只知道该5位数是57或67的倍数,找出所有满足这些条件的5位数并输出。
1*4*7(双重循环)
Fori=0To9
Forj=0to9
n=10407+i*1000+j*10
IfnMod57=0OrnMod67=0Then
Printn
EndIf
Nextj
Nexti
*现要为班级同学购买奖品,有一张面值100元的文具购物券,需购买笔记本(10元/本)和文具盒(15元/套)。
该购物券必须一次性全部用完(不找零不贴钱)。
请列出所有可能的购买方案。
(可以全都购买笔记本或文具盒)
forx=1to10
y=int(100-10*x)/15
printx,y
nextx
*百鸡百钱问题:
已知公鸡每只3元,母鸡每只5元,每3只小鸡1元。
用100元钱买100只鸡,问每种鸡应各买多少?
DimaAsInteger,bAsInteger,cAsInteger
a=0
b=0
c=0
Fora=0to33
Forb=0to20
Forc=0to100
ifa+b+c=100anda*3+b*5+1/3*c=100then
Printa;b;c
endif
Nextc
Nextb
Nexta
*求1000以内的素数
Fori=2To1000
f=0
j=2
Forj=2Toi-1
IfiModj=0Then
f=1
EndIf
j=j+1
Nextj
Iff=0Then
Printi
EndIf
Nexti
*判断一个输入的数是否为素数(此题不是枚举)
a=inputbox(“”)
ifa<=1then
print“no”
else
f=0
fori=2toa-1
ifamodi=0then
f=1
endif
nexti
iff=0then
print“yes”
else
print“no”
endif
endif
*包装600个变形金刚,要求:
1)包装的规格分别是:
小盒每盒12个,大盒每盒15个;2)每种规格的盒数都不能为0
Forx=1to50
Fory=1to50
If12*x+15*y=600then
I=x
J=y
PrintI,j
endif
Nexty
Nextx
排序算法
*输入10个数,将这10个数从小到大排序(冒泡排序)
Dimd(1to10)assingle,iAsInteger,jAsInteger,kAsInteger
i=1
DoWhilei<=10
d(i)=InputBox("")
i=i+1
Loop
i=1
n=10
DoWhileij=10
DoWhilej>i
Ifd(j)k=d(j):
d(j)=d(j-1):
d(j-1)=k
EndIf
j=j-1
Loop
i=i+1
Loop
i=1
DoWhilei<=10
Printd(i)
i=i+1
Loop
查找算法
*顺序查找10个数中key等于48的位置,如找到,输出数组下标
18,25,12,34,13,14,,48,49,56,67
Dimd(1To10)AsSingle,iAsInteger,jAsInteger,keyAsSingle,mAsInteger,rAsInteger
i=1
DoWhilei<=10
d(i)=InputBox("")
i=i+1
Loop
i=1
r=0
key=inputbox(“请输入key”)
DoWhilei<=10andr=0
Ifkey=d(i)then
r=i
endif
i=i+1
Loop
ifr<>0then
printr,d(r)
else
print”didnotfind”
endif
*对分查找10个数中key等于48的位置,如找到,输出数组下标
12,13,14,18,25,34,48,49,56,67
Dimd(1To10)AsSingle,iAsInteger,jAsInteger,keyAsSingle,mAsInteger,rAsInteger
i=1
DoWhilei<=10
d(i)=InputBox("")
i=i+1
Loop
i=1
j=10
r=0
key=inputbox(“请输入key”)
DoWhilei<=jandr=0
m=int((i+j)/2)
Ifkey=d(m)then
r=m
endif
Ifkeyj=m-1
else
i=m+1
endif
Loop
ifr<>0then
printr,d(r)
else
print”didnotfind”
endif
递推算法(考试不需要)
*一个球从100米高度自由下落,落地后反弹回到原高度的一半处,再落下,又反弹回到第2次下落时高度的一半,以后每次都反弹到上次下落的高度一半处。
求该球在第10次落地时,共经过了多少米?
第10次反弹到多高?
S=100
X=100
I=1
Dowhilei<10
X=x/2
S=s+x
I=i+1
Loop
Prints
Printx/2
*将一张足够大的纸,第一次对折,第二次再对折,第三次再对折,······,要想知道折叠27次的厚度(假设10层纸的厚度为1毫米)
*一小球从10米高空落地,以后每次弹起的高度都要比前一次减少20%,经过多少次后,小球弹起的高度小于0.01米。
I=0
X=10
Dowhilex>=0.01
X=x*(1-0.2)
I=i+1
Loop
Printi-1