VFP编程题参考(2)

VFP编程题参考(2)
VFP编程题参考(2)

Visual FoxPro编程题参考题解

1.编程序求出1-200以内的能被7整除的数的平方和。377986

s=0

for I=1 to 200

if mod(I,7)<>0

loop

endif

s=s+I*I

endfor

?”s=”,s

2.编写程序,求共有几组i、j、k符合算式ijk+kji=1333,其中i、j、k是 0~9之间的一位整数。6

n=0

for I=1 to 9

for j=0 to 9

for k=1 to 9

if (I*100+j*10+k)+(k*100+j*10+i)=1333

n=n+1

endif

endfor

endfor

endfor

?n

3.编程序求1~99的平方根的和并输出结果。(保留小数点两位).661.46

s=0

for I=1 to 99

s=s+sqrt(I)

ednfor

?round(s,2)

4.编写程序,求所有符合算式ij*ji=1300的最小数ij(即i*10+j)。其中i、j是1~9之间的一位整数。25

A=0

for I=1 to 9

for J=1 to 9

if (I*10+J)*(J*10+I)=1300

A=I*10+J

exit

Endif

Endfor

If a<>0

Exit

endif

endfor

?A

5.编程序求出1~100所有整数的平方和并输出结果。338350

s=0

for n=1 to 100

s=s+n**

endfor

?n

6.编写程序,求在四位数的奇数中,所有各位数字之和是25的倍数的数的和。1298515 s=0

for n=1001 to 9999 step 2

a=int(n/1000)

b=int((n-a*1000)/100)

c=int((n-a*1000-b*100)/10)

d=mod(n,10)

w=a+b+c+d

if mod(w,25)=0

s=s+n

endif

endfor

?s

33.编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。110

7.编写程序,求在四位数的偶数中,所有各位数字之和是30的倍数的数的和。288840 s=0

for n=1000 to 9998 step 2

a=int(n/1000)

b=int((n-a*1000)/100)

c=int((n-a*1000-b*100)/10)

d=mod(n,10)

w=a+b+c+d

if mod(w,30)=0

s=s+n

endif

endfor

?s

8.编程序求出1到5000之间的能被5整除的前若干个偶数之和,当和大于500 时程

序退出。550

s=0

for n=1 to 5000

if mod(n,5)=0 .and.mod(n,2)=0

s=s+n

endif

if s>500

exit

endif

endfor

?s

9.已知a>b>c,且a+b+c<100,求满足条件.1/(a^2)+1/(b^2)=1/(c^2的共有多少组。N=0

For a=2 to 100

For b=1 to a

For c=0 to b

If a+b+c>=100

Exit

Endif

If 1/(a^2)+1/(b^2)=1/(c^2)

N=N+1

Endif

Endfor

Endfor

Endfor

?N

set talk on

10.编程序求在3000以内被17或者23整除的正整数数的个数。299

set talk off

clear

n=0

for i=17 to 3000

if mod(i,17)=0 .or. mod(i,23)=0

n=n+1

endif

endfor

?n

11.一个数如果刚好与它所有的因子之和相等,则称该数为一个“完数”,如:6=1+2+3,则6就是一个完数。求出200到500之间所有的完数之和。496

a=0

for i=200 to 500

s=0

for j=1 to i-1

if mod(i,j)=0

s=s+j

endif

endfor

if s=i

a=a+i

endif

endfor

?a

86.一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。例如, 6的真因子为1,2,3,而6=1+2+3,因此,6是“完数”。求[1,1000]之间的最大完数。496 12.已知一个数列的前3个数为0,0,1,以后每个数为前3个数的和,编程序求此数列的第36个数。334745777

a1=0

a2=0

a3=1

n=4

do while n<=36

an=a1+a2+a3

t=a2

a2=a3

a1=t

a3=an

n=n+1

enddo

?an

13.编写程序,计算在0至50的范围内有多少个数,其每位数的乘积大于每位数的和。

23

n=0

for i=1to 50

a=int(i/10)

b=mod(i,10)

if a*b>a+b

n=n+1

endif

endfor

?n

29.程序,计算在0至99的范围内有多少个数,其每位数的乘积小于等于每位数的和。

37

14.程序,计算在0至50的范围内有多少个数,其每位数的乘积小于每位数的和.26 程序与13题类似

127.统计[100,10000]之间有多少个这样的整数,其各位数字之和能被7整除。1408 15.用一元纸币兑换一分、两分和五分的硬币,要求兑换硬币的总数为50枚,问共有多少种换法?(注:在兑换中一分、两分或五分的硬币数可以为0枚).13

n=0

for i=0 to 50

for j=0 to 50

for k=0 to 20

if i+2*j+5*k=100 .and.i+j+k=50

n=n+1

endif

endfor

endfor

endfor

?n

16.把18元钱分成一元、二元和五元的纸币且纸币数共为10张的分法有多少种?(注:在兑换中一元、二元、五元的纸币数可以为0)。3

程序与13题类似

17.编写程序,求四位数的奇数中,所有各位数字之积(且不为0)是125的倍数的数的和。161095

s=0

for n=1001 to 9999 step 2

a=int(n/1000)

b=int((n-a*1000)/100)

c=int((n-a*1000-b*100)/10)

d=mod(n,10)

w=a*b*c*d

if mod(w,125)=0 .and.w<>0

s=s+n

endif

endfor

?s

96.设某四位数的各位数字的平方和为100,且该数能被3整除。求共有多少个这样的四位数。.23

64.有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。试求这种三位数共有多少个? .4

18.所谓回文数是从左至右与从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,求出100—900之间的所有回文数的个数。80

n=0

for i=100 to 900

a=int(i/100)

b=int((i-a*100)/10)

c=mod(i,10)

if a=c

n=n+1

endif

endfor

?n

25.所谓回文数是从左至右或从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,计算从1981年开始到3000年为止,共有多少个年号是回文数年号。11 19.编程序求出100到200之间同时满足除3余2和除5余3条件的数的个数。6

n=0

for I=100 to 200

if mod(I,3)=2 .and. mod(I,5)=3

n=n+1

endif

endfor

?n

20.百钱百鸡问题。用100钱买100只鸡,公鸡一只五钱,母鸡一只三钱,雏鸡三只一钱,编程计算共有几种买法(要求每种鸡至少要买1只)。3

n=0

for i=1 to 100

for j=1 to 20

for k=1 to 34

if i/3+j*5+k*3=100 .and.i+j+k=100

n=n+1

endif

endfor

endfor

endfor

?"n=",n

38.有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?.9

101.马克思曾经做过这样一道趣味数学题:有30个人在一家小饭店里用餐,其中有男人、女人和小孩,每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,共花去50先令。如果要求男人、女人和小孩都有人参与,试求有多少种方案分配男人、女人和小孩的人数。9

75.把一张一元钞票,换成一分、二分和五分硬币,每种至少8枚,问有多少种方案?.80 21编程序求出 2+4+8+16+32+…这样的数之和。如果累加数大于500时,则程序终止并输出结果。510

clear

s=0

n=1

do while s<=500

s=s+2^n

n=n+1

enddo

?"s=",s

22.今有5羊4犬3鸡2兔值钱1496,4羊2犬6鸡3兔值钱1175,3羊1犬7鸡5兔

值钱958,2羊3犬5鸡1兔值钱861,求鸡值多少钱?(鸡23.免29.羊177.犬121) clear

s=0

flag=1

for y=1 to 300

for q=1 to 400

for t=1 to 200

j=(1496-5*y-4*q-2*t)/3

if

(4*y+2*q+6*j+3*t)=1175.and.(3*y+q+7*j+5*t)=958.and.(2*y+3*q+5*j+t)=861

flag=0

exit

endif

endfor

if flag=0

exit

endif

endfor

if flag=0

exit

endif

endfor

?"j=",j

23.编程序求出1~100所有整数的立方和并输出结果。25502500

24.“水仙花数”是指这样的数,其各位数字的立方和等于该数本身,如: 153=1^3+5^3+3^3。编写程序求100至400的范围内有多少个水仙花数。3

26.所谓素数是指这样的自然数,除1和它本身外不再有其它因子。编写程序,计算从1981年开始到3000年为止,我们将遇到多少个素数年号。131

27.编写程序,求出9到499之间的所有非偶数非素数的数之和。40965

s=0

n=0

for I=9 to 499 step 2

for j=2 to sqrt(i)

if mod(I,j)=0

s=s+I

n=n+1

exit

endif

endfor

endfor

?”s=”,s

?”n=”,n

28.编写程序,求出3到100之间的所有非偶数非素数的数的个数。25

同上

103 求[500,1999]之间的素数的个数,且要求该素数十位数字为7。22

42.求[666,777]范围内素数的个数。 .16

46.求[444,666]范围内最大的素数是多少? .661

30.编写程序,求在10~1000之间所有能被4除余3,被7除余5,被9除余2的数之和。1700

s=0

for I=10 to 1000

if mod(I,4)=3.and.mod(I,7)=5.and.mod(I,9)=2

s=s+I

endif

endfor

?s

44.求[351,432]之间所有既不能被3整除,又不能被8整除的正整数的个数。 .47 31.编写程序,计算1000以内有多少个这样的数,其个位数为6且该数能被9整除。11 n=0

for I=6 to 1000

if mod(I,10)=6.and.mod(I,9)=0

n=n+1

endif

endfor

?n

51.求[1,5000]之间能同时被3和7整除的数的个数。 .238

99.求[1,1000]之间能被3整除,且至少有一位上的数是5的所有数之和。46509

set talk off

clear

s=0

for i=12 to 999 step 3

do case

case i<=99

a=int(i/10)

b=mod(i,10)

if a=5 .or.b=5

s=s+i

endif

case i<=999

a=int(i/100)

b=int((i-a*100)/10)

c=mod(i,10)

if a=5 .or.b=5 .or.c=5

s=s+i

endif

endcase

endfor

?s

set talk on

32.编写程序,计算1000以内有多少个这样的数,其十位数为6且能被8整除。15 34.编程序求1~85的平方根和并输出结果。(保留小数点两位).526.85

s=0

for I=1 to 85

s=s+sqrt(i)

endfor

?round(s,2)

35.编写程序,求一正整数等差数列的前六项的平方和,该数列的前四项之和是26、之积是880。699(其中a=2,d=3)

*等差数列公式:an=a1+(n-1)d

*前n项之和公式:sn=na1+n*(n-1)*d/2

*由题意得:d=(26-4*a1)/6

s=0

for a=1 to 6

d=(26-4*a)/6

if a*(a+d)*(a+2*d)*(a+3*d)=880

exit

endif

endfor

dimension b(6)

for i=1 to 6

b(i)=a+(i-1)*d

endfor

for i=1 to 6

s=s+b(i)*b(i)

endfor

?"a=",a

?"d=",d

?"s=",s

36.编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。4

37.(1)求符合下列条件的四位完全平方数(某个数的平方数为完全平方数),它的千位数字与十位数字之和等于百位数字与个位数字之积,例如,3136=56^2, 且3+3=1*6 故3136是所求的四位完全平方数. 求其中最大的一个数。7921

for I=9999 to 1000 step –1

a=int(i/1000)

b=int((I-a*1000)/100)

c=int((I-a*1000-b*100)/10)

d=mod(I,10)

if a+c=b*d.and.sqrt(i)=int(sqrt(i))

?I

exit

endif

endfor

(2)编写程序,统计1000~9999之间的所有满足以下条件的四位数的个数。该四位数是一个完全平方数,其第1位与第3位数字之和为10,第2位与第4位数字之积为12。2 n=0

for I=1000 to 9999

a=int(i/1000)

b=int((I-a*1000)/100)

c=int((I-a*1000-b*100)/10)

d=mod(I,10)

if a+c=10.and.b*d=12.and.sqrt(i)=int(sqrt(i))

n=n+1

endif

endfor

?n

39.已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。求[1,100]之间第10个能被其因子数目整除的正整数。56

n=0

for i=1 to 100

k=0

for j=1 to i

if mod(i,j)=0

k=k+1

endif

endfor

if mod(i,k)=0

n=n+1

endif

if n=10

exit

endif

endfor

?i

40.倒勾股数是满足公式: 1/A^2+1/B^2=1/C^2 的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1/156^2+1/65^2=1/60^2。假定A>B>C,求A,B,C小于或等于100的倒勾股数有多少组?.5

n=0

for c=1 to 100

for b=c to 100

for a=b to 100

if (b*b*c*c+a*a*c*c-b*b*a*a=0).and.a>b.and.b>c

?a,b,c

n=n+1

endif

endfor

endfor

endfor

?n

85.A,B,C三个正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。求130

41.已知A

x1=1.5

x2=2.5

x=(x1+x2)/2

y=x*x*x-2*x-5

do while abs(y)>0.001

if y>0

x2=x

else

x1=x

endif

x=(x1+x2)/2

y=x*x*x-2*x-5

enddo

?round(x,2)

45.求方程X^2-3*X+1=0在区间(0,1)内的解。要求:按四舍五入的方式精确到小数点后

第二位。0.38

韦达定理:d=b*b-4*a*c x1=(-b+sqrt(d))/(2*a), x2=(-b-sqrt(d))/(2*a)

条件:d>=0

47.已知Fibonacci数列:1,1,2,3,5,8,……,它可由下面公式表述:.. F(1)=1 if n=1 F(2)=1 if n=2 F(n)=F(n-1)+F(n-2) if n>2 试求F(1)+F(2)+……+F(50)值。提示:最好使用递推法求解,

因为使用递归调用很可能超出某些语言的递归深度。32951280098

f1=1

f2=1

s=f1+f2

for i=3 to 50

fn=f1+f2

s=s+fn

t=fn

f1=f2

f2=t

endfor

?s

set talk on

48.有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13....(注:该数列从第二项开始,其

分子是前一项的分子与分母的和,而其分母是前一项的分子),求出这个序列前24项的

和。要求:按四舍五入的方式精确到小数点后第二位。39.13

set talk off

clear

s=0

a1=2

a2=1

for I=1 to 24

s=s+a1/a2

t=a1

a1=a1+a2

a2=t

endfor

?round(S,2)

set talk on

50.自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差

17-8=9都是平方数,则称8和17是自然数对(8,17)。假定(A,B)与(B,A)是同

一个自然数对且假定A>=B,求所有小于或等于100(即:A<=100,B<=100)的自然数对

中B之和。1160

set talk off

s=0

for i=1 to 100

for j=i to 100

if int(sqrt(abs(i+j)))=sqrt(abs(i+j)).and.

int(sqrt(abs(j-i)))=sqrt(abs(j-i)).and.j>i

s=s+i

endif

endfor

endfor

?s

52.设某国今年的国民生产总值为45600亿元,若今后每年以8%的增长率增长,计算多少年后能实现国民生产总值翻两番? .19

n=0

s=45600

do while s<4*45600

s=s+s*0.08

if s=45600*4

exit

endif

n=n+1

enddo

?s,n

53.勾股弦数是满足公式: A^2+B^2=C^2 (假定A

n=0

for a=1 to 25

for b=a+1 to 25

for c=b+1 to 100

if a*a+b*b=c*c.and.a+b+c<=100

n=n+1

endif

endfor

endfor

endfor

?n

54.若某整数平方等于某两个正整数平方之和的正整数称为弦数。例如:由于3^2+4^2=5^2,则5为弦数,求[100,200]之间弦数的数目.55.

set talk off

clear

n=0

for I=100 to 200

for a=1 to I-1

flag=1

for b=a to I-1

if a*a+b*b=I*I

n=n+1

flag=0

endif

endfor

if flag=0

exit

endif

endfor

endfor

?n

set talk on

55.设有6个十进制数字a,b,c,d,f,e,求满足abcdf×e=fdcba条件的五位数abcdf(a ≠0,e≠0,e≠1)的个数。2

n=0

for i=10000 to 99999

a=int(i/10000)

b=int((i-a*10000)/1000)

c=int((i-a*10000-b*1000)/100)

d=int((i-a*10000-b*1000-c*100)/10)

f=mod(i,10)

for e=2 to 9

if (a*10000+b*1000+c*100+d*10+f)*e=f*10000+d*1000+c*100+b*10+a

?i

?e

n=n+1

endif

endfor

endfor

?n

61.设有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e 不等于0或1),求满足上述条件的最大四位数abcd的值。1999

56.设某四位数的各位数字的平方和等于100,问共有多少个这种四位数?.49

57.求方程8x-5y=3,在|x|<=150, |y|<=200内的整数解。试问这样的整数解中|x|+|y|的最大值是多少?.323

58.若两素数之差为2 ,则称两素数为双胞胎数,问[31,600]之间有多少对双胞胎数。

21

59.若某整数N的所有因子之和等于N的倍数,则N称为多因子完备数,如数28,其因子之和1+2+4+7+14+28=56=2*28,28是多因子完备数。求[1,500]之间有多少个多因子完备数。5

60.一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。试求[100,999]之内的所有逆向超级素数的个数。39

n=0

for i=111 to 999

flag=1

for j=2 to sqrt(i)

if mod(i,j)=0

flag=0

exit

endif

endfor

if flag=0

loop

endif

if flag=1

a=int(i/100)

b=int((i-a*100)/10)

c=mod(i,10)

w=b*10+c

p=1

for k=2 to sqrt(w)

if mod(w,k)=0

p=0

exit

endif

endfor

if p=1

q=1

for l=2 to sqrt(c)

if mod(c,l)=0

q=0

exit

endif

endfor

if q=1.and.c<>0.and.b<>0.and.c<>1

n=n+1

?i

endif

endif

endif

endfor

?n

62.已知:f(1)=1,f(2)=1/(1+f(1)),f(3)=1/(1+f(2)),…,f(n)=1/(1+f(n-1)),求f(50)。(按四舍五入的方式精确到小数点后第三位)。0.618

f1=1

for i=2 to 50

f1=1/(1+f1)

endfor

?round(f1,3)

71.已知: f(0)=f(1)=1 f(2)=0 f(n)=f(n-1)-2f(n-2)+f(n-3), (n>2) 求f(0)到f(50)中的最大值.598325

f0=1

f1=1

f2=0

max1=0

for I=3 to 50

fn=f2-2*f1+f0

f0=f1

f1=f2

f2=fn

if max1

max1=fn

endif

endfor

?max1

73.数列: e(1)=e(2)=1 e(n)=(n-1)e(n-1)+(n-2)e(n-2), (n>2) 称为e数列,每一个e(n),(n=1,2,…)称为e数。求[1,30000]之内最大的e数。16687

77.斐波那契数列的前二项是1,1,其后每一项都是前面两项之和,求:10000000以内最大的斐波那契数?.9227465

118.已知f(n)=f(n-1)+2f(n-2)-5f(n-3),f(0)=1,f(1)=2,f(2)=3,

求f(0)+f(1)+…f(30)。-750874

63.梅森尼数是指能使2^n-1为素数的数n,求[1,21]范围内有多少个梅森尼数?.7 n=0

for I=2 to 21

flag=1

for j=2 to sqrt(2^I-1)

if mod((2^I-1),j)=0

flag=0

exit

endif

endfor

if flag=1

n=n+1

endif

endfor

?n

65.某些分子和分母都是二位正整数的真分数具有下列特点:如果将该分数的分子个位数和分母十位数同时去掉,所得结果正好等于原分数约分后的结果,例如16/64=1/4,求满足上述条件的所有真分数个数。48

n=0

for I=11 to 99

for j=I+1 to 99

a=int(I/10)

b=mod(j,10)

if i/j=a/b.and.b<>0

n=n+1

endif

endfor

endfor

?n

66.若两个自然连续数乘积减1后是素数,则称此两个自然连续数为友数对,该素数称为友素数,例:2*3-1=5,因此2与3是友数对,5是友素数,求[40,119]之间友素数对的数目。30

n=0

for I=40 to 119

k=I*(I+1)-1

flag=1

for j=2 to sqrt(k)

if mod(k,j)=0

flag=0

exit

endif

endfor

if flag=1

n=n+1

endif

endfor

?n

67.找满足以下条件: X^2+Y^2+Z^2=41^2 且X+Y+Z之值最大的三个正整数X,Y,Z, 求X+Y+Z之值.71

n=0

max1=1

for i=1 to 41

for j=1 to 41

for k=1 to 41

if (i*i+j*j+k*k=41*41)

n=i+j+k

if max1

max1=n

endif

endif

endfor

endfor

endfor

?max1

set talk on

68.求[2,500]之间的所有素数的和。.21536

69.求[3-1000]之间最大的五个素数之和。4919

set talk off

s=0

n=0

for I=999 to 3 step –2

flag=1

for j=2 to sqrt(i)

if mod(I,j)=0

flag=0

exit

endif

endfor

if flag=1

s=s+I

n=n+1

endif

if n>=5

exit

endif

endfor

?s

72 问[100,200]之间有奇数个不同因子的整数共有多少个?.5

k=0

for I=100 to 200

n=0

for j=1 to I

if mod(I,j)=0

n=n+1

endif

endfor

if mod(n,2)=1

k=k+1

endif

endfor

?k

76.若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。例如:由于 7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。求所有“四位双平方数”的个数。17

n=0

for i=1000 to 9999

a=int(i/1000)

b=int((i-a*1000)/100)

c=int((i-a*1000-b*100)/10)

d=mod(i,10)

f=a+b+c+d

if int(sqrt(i))=sqrt(i).and.int(sqrt(f))=sqrt(f)

n=n+1

endif

endfor

?n

set talk on

78.求[200,300]之间最小的一个有奇数个不同因子的整数。 .225

set talk off

for I=200 to 300

n=0

for j=1 to I

if mod(I,j)=0

n=n+1

endif

endfor

if mod(n,2)=1

?I

exit

endif

endfor

79.一个数出现在该数的平方数的右边,称这个数为“同构数”。例如,5出现在平方数25的右边,25出现在平方数625的右边,则5、25都是“同构数”。找出1到1000之间的所有“同构数”的个数。 7

n=0

for I=1 to 1000

a=len(alltrim(str(i)))

b=alltrim(str(I*I))

c=right(b,a)

if c=alltrim(str(i))

n=n+1

endif

endfor

?n

80.在[200,900]范围内同时满足以下两个条件的十进制数:⑴其个位数字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数;问有多少个这样的数?.14 81.求[200,300]之间第二大有奇数个不同因子的整数。256

k=0

for I=300 to 200 step -1

n=0

for j=1 to I

if mod(I,j)=0

n=n+1

endif

endfor

if mod(n,2)=1

k=k+1

endif

if k=2

?i

exit

endif

endfor

set talk on

82 一个14*14方阵A(i,j),其每个元素的值为该元素下标的立方和,求出该矩阵所有元素的累加和(注:i,j从1到14).308700

set talk off

相关主题
相关文档
最新文档