趣味小程序汇编 1992-04-03 ●趣题巧解 一九九0年广东省青少年计算机LOGO程序设计竞赛中有这样一道题:把45拆成A、B、C、D四个数,(即这四个数之和为45),要求:A数加上2、B数减云、C数乘上2、D数除以2的结果都相等。问:A、B、C、D各是多少?编程序解决这个问题。 这个问题按常规的思路应该是用四重循环进行搜索。但是这种方法占用时间太长。有没有较好的方法呢?当然有。笔者用BASIC语言巧妙地解决了这一问题。程序如下: 10 T=2 20 A=T-2:B=T+2:C=T/2:D=T*2 30 IF A+B+C+D=45 THEN PRINT A,B,C,D:END 40 T=T+2:GOTO 20 ]RUN 8 12 5 20 以上程序充分体现了逆向思维的优越性,运行速度快。 ●54=? 题目:若8×8=54,那么54应该是多少? 注:等式左端是十进制数,右端是X(未知)进制数;问题中的54是十进制数,要求回答54在X进制下是多少。 程序: 10 X=(8*8-4)/5 11 INPUT“N=”;N 12 M=N 14 I=1 15 IF N〈 X THEN GOTO 20 16 R(I)=INT(N/X) 17 N=N-R(I)*X 18 I=I+1 19 GOTO 15 20 PRINT M;“(10)=”; 21 FOR J=1 TO I 22 PRINT R(J); 23 NEXT J 24 PRINT “(”;X;“)” 25 END RUN N=54 54(10)=46(12 ●犬追线 在一正方形场地四角有四条猎犬,分别为A、B、C、D。鸣枪后它们同时起跑,并以相同的速率A追B;B追C;C追D;D追A。 运行下面程序,就能在屏幕上展现出它们的运动轨迹__优美的犬追线程序。在APPLE机上运行。 10 H=140: I=80: L=79 20 A=H_L: B=I_L 30 C=H+L: D=I_L 40 HGR: HCOLOR=3 50 HPLOT A,B: HPLOT C ,D 70 HFLOT H_A+H,I_B+I 80 HPLOT H_C+H,I_D+I 90 E=C_A:F=D_B 100 K=ABS(F/E) 110 S=SQR(1/(K*K+1)) 120 A=A+SGN(E)*S 130 B=B+SGN(F)*S*K 140 C=H+(I_B):D=I_(H_A) 150 IF ABS (E)+ABS (F)>1 THEN 5 ●群星闪烁 黑夜晴空,满天星斗闪烁,给人一种静谧神秘的感觉。运行下面程序,可在屏幕上显示出群星闪烁的情景。 5 HGR2:HCOLOR=0:HPLOT 21,21:CALL 62454 10 DIM A(210,B(210),C(210):FOR I=1 TO 210 20 B(I)=INT(RND(1)*7+0.5):HCOLOR=B(I) 25 A(I)=INT (RND(1)*280):C(I)=INT(RND(1)*192) 27 HPLOT A(I),C(I):NEXT I 30 FOR L=1 TO 210:HCOLOR=0 40 HPLOT A(I),C(I) 50 FOR T=1 TO 100:NEXT T 60 HCOLOR=B(I):HPLOT A(I),C(I) 70 NEXT L:GOT 30 本程序在APPLE_Ⅱ计算机上运行。程序中5句为背景设置,20句为星星的色彩,25句为每个星星的坐标,30_70句的作用是使星星闪烁,50句是延时语句 ●X=? 题目:求出10000以内,被2除余1、被3除余2、被4除余3、被5除余4、被6除余5、被7除余6、被8除余7、被9除余8的数。 程序: 10 DIM A(5):T=5:FOR I=1 TO 5:A(I)=T:T=T+1:NEXT I 20 FOR T=2 TO 3:FOR I=1 TO 5 30 IF A(I)/T<>INT (A(I)/T) THEN 50 40 A(I)=A(I)/T 50 NEXT I:NEXT T 60 A=2*3*A(1)*A(2)*A(3)*A(4)*A(5) 70 FOR B=A TO 10000 STEP A 80 PRINT B-1: NEXT B 90 END RUN 2519 5039 755 ●电脑万花筒 程序运行可产生丰富多变的图案,犹如一个奇妙的万花筒,而所有语句仅占一个程序行(中华、APPLE机)。 1 HGR 2:FOR N=0 TO 9:C=INT (RND (1)* 5):S=INT(RND (1)* 3+5):FOR A=0 TO 278 STEP 2:HCOLOR=S:HPLOT A,0 TO 279-A,191:HCOLOR=C:HPLOT A+1,0 TO 278-A,191:NEXT:FOR A=0 TO 190 STEP 2:HCOLOR=S: HPLOT 279, A TO 0,191-A:HCOLOR=C:HPLOT 279,A+1 TO 0,190-A:NEXT A,N:IF PEFK(-16384)>127 THEN END:GOTO ●电脑与诗歌 如果你在摆弄电脑的同时,还是一位诗歌爱好者,那么你当然知道,诗歌的写作和欣赏,须要掌握诗词的平仄格式,律诗与绝句各自的平仄格式,是对押韵和声调的严格要求,不知这种要求的人,无法真正欣赏今体诗;不按这种要求写的诗,不能称为律诗和绝句。按照我国著名语言学家王力教授的《诗词格律概要》一书所述,律诗和绝句的平仄和格式可按首句末两字的平仄来分,共有十六种正格句型,你只要在计算机上运行这个程序,计算机立即为你把这十六种平仄格式全部列印出来,你不妨试一试。 10 DIM A(11,7):B$(0)="平":B$(1)="仄":B$(2)="绝":B$(3)="五":B$(4)="律":B$(5)="七" 20 DATA 0,0,1,1,0,0,1:FOR J=1 TO 7:READDA(1,J):NEXT J 30 FOR I=1 TO 5:S=2*I+1:FOR J=1TO 7:A(S-1,J)=1-A(S-2,J):NEXT J 40 FOR J=1 TO 7:A(S,J)=A(S-1,J):NEXT J:T=A(S,5):A(S,5)=A(S,7):A(S,7)=T:NEXT I 50 FOR L=1 TO 4:X=4-SGN(L-2.5):Y=2*(L-2*INT(L/2)+1):A=6-X 60 FOR K=1 TO 4:B=4-2*(INT(ABS(K-2.5))):C=B+2*(Y-1) 70 PRINT B$(X);B$(Y);B$(A(K,6));B$(A(K,7));"脚句型:":PRINT 80 PRINT SPC(4);:FOR J=A TO 7:PRINT B$(A(K,J));:NEXT J:PRINT 90 FOR I=B TO C:PRINT SPC(4);:FOR J=A TO 7:PRINT B$(A(I,J));:NEXT J:PRINT:NEXT I 100 PRINT :NEXT K,L:EN ●巧求π值 用计算机可以进行许多有趣的程序设计,特别是初学者,只需一些极简单的程序语句即可进行笔算相当复杂的计算程序设计。我设计的求园周率π值程序就是这样。原理:多边形的边数越多,则周长越接近于其外接圆周长,由此来计算圆周率。使用该程序很快即可算出古人用毕生精力来计算,尚成就甚微的π值。程序如下: 10 B=1:X=1 20 Y=(X↑2+3)↑.5 30 Z=3↑.5/y 40 A=(8-8*Z)↑.5*3*B 50 B=B*2 60 X=X*3↑.5/(Y+3↑.5) 70 PRINT "A=";A 80 GOTO 20 美国一大学生用计算机将园周率算到了小数点后上万位,这是众所周知的。而该程序若要在微机上如此,则需采取一些特殊措施,如引入大数据程序,防止浮点数太大,而造成误差等等 ●数台阶 一段长长的台阶,如果每次跨二阶,则最后剩一阶;如果每次跨三阶,则最后剩二阶;如果每一次跨五阶,则最后剩四阶;如果每次跨六阶,则最后剩五阶;如果每次跨七阶,则最后刚好走完,一阶不剩,问此台阶一共有多少阶? 10 INPOT N 20 FOR I=1 TO N 30 IF(I-1)/2<>INT((I-1)/2) THEN 90 40 IF(I-2)/3<>INT((I-2)/3) THEN 90 50 IF(I-4)/5<>INT((I-4)/5) THEN 90 60 IF(I-5)/6<>INT((I-5)/6) THEN 90 70 IFI/7<>INTI/7) THEN 90 80 PRINT I 90 NEXE I 100 END ●星际历险 自从人类征服月球,踏上月球上松软的土地,于是人类就更大胆地向外空间发展。你必须学会驾驶星际战机,接受挑战。 下面这个程序可以带你领略一下星际历险的滋味。(本程序在苹果Ⅱ机及中华机上运行通过) 10 HOME: X=20:Y=13:S=0 20 FOR I=1 TO 24 30 VTAB I:HTAB 9:PRDINT"'":HTAB 3D:PRINT"'"; 40 NEXT I 50 A=X:B=Y 60 P=PEEK(-16384) 70 X=X-(P=136)+(P=149) 80 IF X=9 OR X=30 OR PEEK(1703+X)=239 THEN HOME: PRINT "YOU LOSE!";CHR$(7):END 100 R=INT(RND(1)*20+10) 110 HTAB A:VTAB:PRINT" "; 120 VTAB 24:HTAB 9:PRINT" ";:HTAB 30:PRINT "'"; 130 HTAB X:VTAB Y:PRINT"#";:HOME:PRINT"YOU WIN";CHR$(7):END 140 S=S+1:VTAB 23 150 IF S/10=INT(S/10) THEN 130 160 IF S<1000 THEN HTAB R:PRINT"0"; 170 GOTO 5 ●“乱弹琴” 10 X=INT(7*RND+1):Y=INT(6*RND+2):Z=INT(6*RND+5):L=INT(51*RND+50) 20 MUSIC(X,Y,Z) 30 WAIT(L) 40 GOTO 20 (注:可在COMX-35型机上运行) 我们设计的这则趣味程序,有一令人叫绝的特点。就是语句特别短巧,而表现出来的音响,却悠长而又富有变化。但其它的一些音响程序数据庞大,打印繁杂,而乐曲却只有寥寥几下。此程序的音响变化多端,给我们一种与平常乐曲截然不同的新感受,且能使初学者加深对INT与RND的感性认识,很有帮助。