趣味小程序汇编

Author: Date: 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的感性认识,很有帮助。