中学生プログラミングコンテスト

 投稿者:山中和義  投稿日:2013年 9月 4日(水)09時57分4秒
  リンク集にありますが、
中学生プログラミングコンテストの過去の問題に挑戦してみました。
かなり難しいです!

 福島工業高等専門学校 情報処理教育センター


第1回中学生プロコン問題.pdf


1.
a=2*7/(5-4*(-3))
PRINT a
END

2.
INPUT PROMPT "正の整数n=": n
FOR i=1 TO n
   PRINT i;
NEXT i
PRINT !改行
END

3.
INPUT PROMPT "正の整数n=": n
FOR i=2 TO n STEP 2
   PRINT i;
NEXT i
PRINT !改行
END

4.
INPUT PROMPT "a≠0、a=": a
INPUT PROMPT "b=": b
PRINT "x="; -b/a
END

5.
INPUT PROMPT "a=": a
INPUT PROMPT "b=": b
IF a=0 THEN
   PRINT "解なし"
ESLE
   PRINT "x="; -b/a
END IF
END

6.
LET N=5 !5×5
SET WINDOW -1,N+1, -1,N+1 !座標系
FOR i=0 TO N
   PLOT LINES: i,0; i,N !縦線
   PLOT LINES: 0,i; N,i !横線
NEXT i
END

7.
INPUT PROMPT "上底a=": a
INPUT PROMPT "下底b=": b
INPUT PROMPT "高さh=": h
PRINT "面積="; (a+b)*h/2
END

8.
RANDOMIZE
LET C=0
FOR i=1 TO 100 !100回
   IF RND<0.5 THEN LET C=C+1 !確率1/2で発生させる
NEXT i
PRINT C;"回"
END

9.
LET S=0
LET C=1 !米つぶの個数
FOR y=1 TO 5 !行
   FOR x=1 TO 5 !列
      PRINT C;
      LET S=S+C
      LET C=C*2 !次へ
   NEXT x
   PRINT !改行
NEXT y
PRINT "合計="; S
END

10.
INPUT PROMPT "n=": n
LET S=0
FOR i=1 TO n
   LET S=S+i
NEXT i
PRINT "合計(和)="; S
END

(別解)Σk の公式
INPUT PROMPT "n=": n
PRINT "合計(和)="; n*(n+1)/2
END

11.
INPUT PROMPT "n=": n
LET S=0
FOR i=1 TO n
   LET S=S+i*i
NEXT i
PRINT "合計(和)="; S
END

(別解)Σk^2 の公式
INPUT PROMPT "n=": n
PRINT "合計(和)="; n*(n+1)*(2*n+1)/6
END

12.
INPUT PROMPT "": n
SELECT CASE n
CASE 1
   PRINT "A型のあなたは明るい人です。"
CASE 2
   PRINT "B型のあなたは賢明な人です。"
CASE 3
   PRINT "O型のあなたは活発な人です。"
CASE 4
   PRINT "AB型のあなたは楽しい人です。"
CASE ELSE
END SELECT
END

13.
INPUT PROMPT "n=": n
SET WINDOW -(n+1),n+1, -(n+1),n+1 !座標系
FOR R=1 TO n
!(x-a)^2+(y-b)^2=r^2の場合、DRAW CIRCLE WITH SCALE(r)*SHIFT(a,b)
   DRAW CIRCLE WITH SCALE(R)
NEXT R
END

14.
SET WINDOW -3,3, -3,3 !座標系
DRAW grid
DIM PX(6),PY(6)
DATA  2, 0 !6点の座標(x,y)
DATA  1, 2
DATA -1, 2
DATA -2, 0
DATA -1,-2
DATA  1,-2
FOR i=1 TO 6 !読み込む
   READ PX(i),PY(i)
NEXT i
FOR i=1 TO 6-1 !組(i,j) ※辺や対角線
   FOR j=i+1 TO 6
      PLOT LINES: PX(i),PY(i); PX(j),PY(j)
   NEXT j
NEXT i
END

15.


------------------------------------------

第2回中学生プロコン問題.pdf


初級問題
1.
PRINT (2*(-4)+5)/3
END

2.
前出

3.
INPUT PROMPT "a=": a
PRINT INT(a*1.05) !端数は切り捨てる
END

4.
INPUT PROMPT "温度(℃)=": c
IF c>100 THEN
   PRINT "水蒸気"
ELSE
   IF c>=0 THEN
      PRINT "水"
   ELSE
      PRINT "氷"
   END IF
END IF
END

5.
INPUT PROMPT "整数n=": n
IF MOD(n,2)=0 THEN !割り切れるとき
   PRINT "偶数"
ELSE
   PRINT "奇数"
END IF
END

6.
INPUT PROMPT "3つの数a,b,c=": a,b,c
LET m=a
IF b>m THEN LET m=b
IF c>m THEN LET m=c
PRINT m
END

7.
INPUT PROMPT "a時b分c秒=": a,b,c
PRINT (a*60+b)*60+c; "秒"
END

8.
INPUT PROMPT "整数n=": n
FOR i=1 TO n
   PRINT i*i
NEXT i
END

9.
INPUT PROMPT "正の整数n=": n
FOR i=1 TO n
   PRINT SQR(i)
NEXT i
END

10.
FOR i=1 TO 9
   FOR j=1 TO 9
      PRINT USING "###": i*j;
   NEXT j
   PRINT
NEXT i
END

11.
SET WINDOW -20,20, -20,20 !座標系
PLOT LINES: 5,8; 5,5 !線
PLOT LINES: -5,8; -5,5
PLOT LINES: 3,11; 6,11
PLOT LINES: -3,11; -6,11
PLOT LINES: 5,-10; -5,-10
DRAW CIRCLE WITH SCALE(16)*SHIFT(0,0) !円
DRAW CIRCLE WITH SCALE(16)*SHIFT(0,-1)
DRAW CIRCLE WITH SCALE(5)*SHIFT(11,-1)
DRAW CIRCLE WITH SCALE(5)*SHIFT(-11,-1)
PLOT LINES: -14,1; -14,2; -13,2; -13,1; -14,1 !四角形
PLOT LINES: -4,2; -2,2; -2,0; -4,0; -4,2
PLOT LINES: 10,1; 10,2; 11,2; 11,1; 10,1
END

12.
INPUT PROMPT "平成n年=": n
PRINT "平成"; n; "年は、西暦"; n+1988; "年"
END


中級問題
13.


上級問題
19.

 

Re: 中学生プログラミングコンテスト

 投稿者:山中和義  投稿日:2013年 9月 4日(水)16時37分27秒
  > No.3138[元記事へ]

続き

>  福島工業高等専門学校 情報処理教育センター

気になるもの、、、


第3回
1.
INPUT PROMPT "球の半径r=": R
PRINT "表面積="; 4*PI*R*R
END

2.
INPUT PROMPT "t=": t
PRINT 9.8*t*t/2
END

3.
INPUT PROMPT "時速(単位は㎞)a=": a
PRINT "秒速"; a*1000/3600; "m"
END

4.
INPUT PROMPT "身長(単位はm)a=": a
INPUT PROMPT "体重(単位は㎏)b=": b
LET BMI=b/(a*a)
PRINT "BMI="; BMI
IF BMI>=25 THEN
   PRINT "太りすぎかも"
ELSE
   IF BMI<18 THEN
      PRINT "やせすぎ"
   ELSE
      PRINT "標準"
   END IF
END IF
END

5.
INPUT PROMPT "水A[g]=": A
INPUT PROMPT "食塩B[g]=": B
PRINT B*100/(A+B); "%"
END

6.
SET WINDOW -5,5,-5,5
DRAW AXES
FOR x=-4 TO 4 STEP 0.5
   PLOT LINES: x,0; 0,x
NEXT x
END

9.
INPUT PROMPT "正の整数n=": N
FOR i=1 TO n
   PRINT INT(RND*(11-2+1))+2 !2から11まで
NEXT i
END

13.
FOR a=1 TO 9
   FOR b=1 TO 9
      PRINT b; "×"; a; "="; b*a
   NEXT b
NEXT a
END


第4回
6.
INPUT PROMPT "n!=": n
LET T=1 !nの階乗(n!)
FOR i=1 TO n
   LET T=T*i
NEXT i
PRINT T
END

(別解)実際は2以上でOK
INPUT PROMPT "n!=": n
LET T=1 !nの階乗(n!)
FOR i=2 TO n
   LET T=T*i
NEXT i
PRINT T
END

12.
INPUT PROMPT "ax^2+bx+c=": a,b,c
SET WINDOW -5,5, -5,5 !表示範囲
DRAW grid !座標を表示する
FOR x=-5 TO 5 STEP 0.1
   PLOT LINES: x,(a*x+b)*x+c;
NEXT x
PLOT LINES
END


第5回
11.
INPUT PROMPT "5桁の自然数n=": N
FOR i=1 TO 5
   PRINT STR$(MOD(N,10));
   !!PRINT USING "#": MOD(N,10);
   LET N=INT(N/10)
NEXT i
PRINT
END

12.
SET WINDOW -1,11,-1,11
INPUT PROMPT "n=": N
PLOT LINES: 0,0; 10,0; 10,10; 0,10; 0,0
SET AREA COLOR 1 !黒色
IF MOD(N,2)=1 THEN !奇数なら、中央の目
   IF N=1 THEN SET AREA COLOR 4 !赤色
   DRAW DISK WITH SCALE(1)*SHIFT(5,5)
END IF
IF N>1 THEN !斜め右
   DRAW DISK WITH SCALE(1)*SHIFT(8,8)
   DRAW DISK WITH SCALE(1)*SHIFT(2,2)
END IF
IF N>3 THEN !斜め左
   DRAW DISK WITH SCALE(1)*SHIFT(2,8)
   DRAW DISK WITH SCALE(1)*SHIFT(8,2)
END IF
IF N=6 THEN !中央の左右
   DRAW DISK WITH SCALE(1)*SHIFT(2,5)
   DRAW DISK WITH SCALE(1)*SHIFT(8,5)
END IF
END

15.
RANDOMIZE
DIM C(0 TO 365) !発生回数
FOR i=1 TO 40
   LET A=INT(RND*365)+1 !1から365まで
   PRINT A
   LET C(A)=C(A)+1 !+1する
NEXT i
PRINT
FOR i=1 TO 365 !小さい順に表示する
   IF C(i)>0 THEN
      PRINT i;
      IF C(i)>1 THEN PRINT "○";
      PRINT
   END IF
NEXT i
END

21.
SET WINDOW -10,210,-10,210
DIM X(5),Y(5)
DATA   0,  0 !頂点(x,y)
DATA 200,  0
DATA 200,200
DATA   0,200
FOR i=1 TO 4 !読み込む
   READ X(i),Y(i)
NEXT i
LET X(5)=X(1)
LET Y(5)=Y(1)
FOR C=1 TO 6 !6個の正方形
   FOR i=1 TO 4 !4辺を描く
      PLOT LINES: X(i),Y(i); X(i+1),Y(i+1)
      LET X(i)=(X(i)+X(i+1))/2 !次の正方形の頂点位置
      LET Y(i)=(Y(i)+Y(i+1))/2
   NEXT i
   LET X(5)=X(1)
   LET Y(5)=Y(1)
NEXT C
END


第6回
10.
DATA 水曜日,木曜日,金曜日,土曜日,日曜日,月曜日,火曜日
DIM Y$(0 TO 6)
MAT READ Y$
INPUT PROMPT "平成23年9月c日=": c
PRINT Y$(MOD(c,7))
END

12.
FOR N=1 TO 30
   LET A=INT(N/10)*10-N !nの1の位を得る
   LET B=INT(N*N/10)*10-N*N !n^2の1の位を得る
   IF A=B THEN PRINT N
NEXT N
END

(別解)差が0となる
FOR N=1 TO 30
   LET A=N*N-N
   IF INT(A/10)*10-A=0 THEN PRINT N
NEXT N
END

(別解)MOD関数
FOR N=1 TO 30
   IF MOD(N*N-N,10)=0 THEN PRINT N
NEXT N
END

13.
DIM A(3)
INPUT PROMPT "a(1)=": A(1)
INPUT PROMPT "a(2)=": A(2)
INPUT PROMPT "a(3)=": A(3)
INPUT PROMPT "n=": N
FOR i=1 TO 3
   LET T=MOD(i+N-1,3)+1
   PRINT A(T);
NEXT i
END


第7回
3.
INPUT PROMPT "a>0、a=": A
PRINT SQR(SQR(A))
END

9.
DATA 5,8,7,3,2,5,0,9,6,4,7,1,3,2,7
INPUT PROMPT "n=": N
DIM A(N)
LET S=0
FOR i=1 TO N !n個のデータ
   READ A(i) !読み込む
   PRINT A(i); !表示する
   LET S=S+A(i) !集計する
NEXT i
PRINT
PRINT "合計="; S
PRINT "平均="; S/N
END

13.
第7回の問10を参照のこと。

DATA 5,8,7,3,2,5,0,9,6,4,7,1,3,2,7
INPUT PROMPT "n=": N
DIM A(N)
FOR i=1 TO N !n個のデータを読み込む
   READ A(i)
   PRINT A(i);
NEXT i
PRINT
FOR i=1 TO N-1 !並べ替え
   FOR J=i+1 TO N
      IF A(i)<A(J) THEN !a(i)とa(J)を入れ替える
         LET W=A(i)
         LET A(i)=A(J)
         LET A(J)=W
      END IF
   NEXT J
NEXT i
FOR i=1 TO N !結果を表示する
   PRINT A(i);
NEXT i
PRINT
END

参考 順位付け
DATA 5,8,7,3,2,5,0,9,6,4,7,1,3,2,7
INPUT PROMPT "n=": N
DIM A(N)
FOR i=1 TO N !n個のデータを読み込む
   READ A(i)
   PRINT A(i);
NEXT i
PRINT
DIM R(N)
FOR i=1 TO N !最初はすべて1位とする
   LET R(i)=1
NEXT i
FOR i=1 TO N-1 !順位を付ける ※組合せ C(n,2)
   FOR J=i+1 TO N
      IF A(i)>A(J) THEN !小さい方を+1する
         LET R(J)=R(J)+1
      ELSE
         IF A(i)<A(J) THEN LET R(i)=R(i)+1
      END IF
   NEXT J
NEXT i
FOR i=1 TO N !結果を表示する
   PRINT R(i);
NEXT i
PRINT
END

14.
INPUT PROMPT "n=": n
LET T=1 !nの階乗(n!)
LET S=1
FOR i=1 TO N
   LET T=T*i
   LET S=S+1/T
NEXT i
PRINT S
END

(別解)
n=5のとき、
1 +1/1! +1/2! +1/3! +1/4! +1/5!
=(5*4*3*2*1 +5*4*3*2 +5*4*3 +5*4 +5 +1) / 5!
と変形する。

INPUT PROMPT "n=": n
LET T=1 !分母 n!
LET S=1 !分子
FOR i=N TO 1 STEP -1
   LET T=T*i
   LET S=S+T
NEXT i
PRINT S/T
END

(別解)
n=5のとき、
1 +1/1! +1/2! +1/3! +1/4! +1/5!
=1+1/1*(1+1/2*(1+1/3*(1+1/4*(1+1/5))))
と変形する。

INPUT PROMPT "n=": n
LET S=1
FOR i=N TO 1 STEP -1
   LET S=S/i+1
NEXT i
PRINT S
END

(別解)
n=5のとき、
1 +1/1! +1/2! +1/3! +1/4! +1/5!
=1 +1/1*(1+1/2*(1+1/3*(1+1/4*(1+1/5(1+0)))))
と変形する。

INPUT PROMPT "n=": n
LET S=0
FOR i=N TO 1 STEP -1
   LET S=(S+1)/i
NEXT i
PRINT S+1
END

15.
SET WINDOW -1,11, -1,11 !表示範囲
DRAW grid !座標を表示する
LET H0=10
FOR t=0 TO 1.4 STEP 0.1
   LET H=H0-4.9*t*t
   DRAW CIRCLE WITH SCALE(0.1)*SHIFT(1,H)
NEXT t
END

17.
第4回の問14を参照のこと。

INPUT PROMPT "n≧2、n=": n
FOR i=2 TO n
   FOR J=2 TO i-1 !割り切れるかどうか
      IF MOD(i,J)=0 THEN EXIT FOR
   NEXT J
   IF J>i-1 THEN !すべてで割り切れない場合
      PRINT i; "は素数"
   ELSE
      PRINT i; "は素数でない"
   END IF
NEXT i
END

参考
INPUT PROMPT "n≧2、n=": n
PRINT " 2 は素数"
FOR i=3 TO n
   IF MOD(i,2)=0 THEN !素数2で割り切れるなら
      PRINT i; "は素数でない"
   ELSE
      LET R=INT(SQR(i)) !√iまでの奇素数で割り切れるかどうか
      FOR J=3 TO R STEP 2
         IF MOD(i,J)=0 THEN EXIT FOR
      NEXT J
      IF J>R THEN !すべてで割り切れない場合
         PRINT i; "は素数"
      ELSE
         PRINT i; "は素数でない"
      END IF
   END IF
NEXT i
END

18.
INPUT PROMPT "n≧2、n=": n
LET C=0
FOR i=2 TO n
   FOR J=2 TO i-1 !割り切れるかどうか
      IF MOD(i,J)=0 THEN EXIT FOR
   NEXT J
   IF J>i-1 THEN !すべてで割り切れない場合
      IF C=0 THEN PRINT STR$(i); ELSE PRINT ","; STR$(i);
      LET C=C+1
   END IF
NEXT i
PRINT " の"; C; "個"
END

20.
DATA 5,8,7,3,2,5,0,9,6,4,7,1,3,2,7
INPUT PROMPT "n=": N
DIM A(N)
FOR i=1 TO N !n個のデータを読み込む
   READ A(i)
NEXT i
LET M=A(1) !最大値
FOR i=2 TO N
   IF A(i)>M THEN LET M=A(i)
NEXT i
SET WINDOW -1,N+1, -1,M+1 !表示範囲
DRAW AXES !座標を表示する
FOR i=1 TO N !縦棒グラフ
   SET AREA COLOR i
   IF A(i)<>0 THEN PLOT AREA: i-1,0; i,0; i,A(i); i-1,A(i)
NEXT i
END

 

Re: 中学生プログラミングコンテスト

 投稿者:山中和義  投稿日:2013年 9月28日(土)19時48分15秒
  > No.3139[元記事へ]

>  福島工業高等専門学校 情報処理教育センター

予想問題

問題
1から300までの自然数のうち、
7で割ると3あまり、かつ、9で割ると5あまる数
をすべて加えるといくつか。

答え
単純に考えると、

LET S=0 !求める和
FOR N=1 TO 300
   IF MOD(N,7)=3 AND MOD(N,9)=5 THEN LET S=S+N
NEXT N
PRINT S
END


あまりの計算を減らすと、

LET S=0 !求める和
FOR N=3 TO 300 STEP 7 !7で割ると3あまる数
   IF MOD(N,9)=5 THEN LET S=S+N !それが、9で割ると5あまる数なら
NEXT N
PRINT S
END

または、

LET S=0 !求める和
FOR N=5 TO 300 STEP 9 !9で割ると5あまる数
   IF MOD(N,7)=3 THEN LET S=S+N !それが、7で割ると3あまる数なら
NEXT N
PRINT S
END


さらに減らすと、

LET S=0 !求める和
LET A=3 !7で割ると3あまる数
LET B=5 !9で割ると5あまる数
DO WHILE A<=300 AND B<=300
   IF A=B THEN !題意を満たす
      LET S=S+A
      LET A=A+7
      LET B=B+9
   ELSEIF A>B THEN !片方を増やす
      LET B=B+9
   ELSE
      LET A=A+7
   END IF
LOOP
PRINT S
END


また、この問題の場合、

7で割ると3あまり、かつ、9で割ると5あまる数は、
 7で割ると(-4)あまり、かつ、9で割ると(-4)あまる数
である。
よって、4を加えると、7*9=63の倍数となる。

!(63-4)+(2*63-4)+(3*63-4)+(4*63-4)
LET S=0 !求める和
FOR N=63 TO 300 STEP 63 !63の倍数
   LET S=S+(N-4)
NEXT N
PRINT S
END


上記の式をまとめると、

!(63-4)+(2*63-4)+(3*63-4)+(4*63-4)=(1+2+3+4)*63 - 4*4
LET M=INT(300/63) !1から300までの数で、63の倍数の個数
PRINT M*(M+1)/2 * 63 - M * 4
END



-------------------------------------------

問題
5個の数字0,1,2,3,4から異なる3個を使って、3桁の数をつくる。
小さい方から42番目の数はいくつですか。

答え
全部で4*4*3=48通り
 48: 432
 47: 431
 46: 430
 45: 423
 44: 421
 43: 420
 42: 413
 41: 412
(終り)

LET S=0 !順位
FOR A=1 TO 4 !百の位
   FOR B=0 TO 4 !十の位
      IF A<>B THEN !A≠B
         FOR C=0 TO 4 !一の位
            IF (C-A)*(C-B)<>0 THEN !C≠AかつC≠B
               LET S=S+1
               PRINT S;":"; A*100+B*10+C
            END IF
         NEXT C
      END IF
   NEXT B
NEXT A
END



-------------------------------------------

問題
正の約数の個数が28個である最小の正の整数を求めてください。

答 960

LET N=1000 !検索範囲
DIM F(N) !個数
MAT F=CON !1は約数である
FOR D=2 TO N !約数
   FOR T=D TO N STEP D !倍数
      LET F(T)=F(T)+1
   NEXT T
   IF F(D)=28 THEN EXIT FOR !すべての約数を列挙されたか
NEXT D
IF D<=N THEN PRINT D
END



類題
素数 2,3,5,7,11,13,17,19,23,29,… を求めてください。

LET N=1000 !検索範囲
DIM F(N) !ふるい
MAT F=ZER
LET F(1)=1 !1は素数でない
FOR P=2 TO N !素数の候補
   IF F(P)=0 THEN
      FOR T=2*P TO N STEP P !倍数
         LET F(T)=1
      NEXT T
   END IF
NEXT P
FOR P=1 TO N !素数を列挙する
   IF F(P)=0 THEN PRINT P
NEXT P
END



-------------------------------------------

問題
1,2,7,8の4つの数字を使ってできる立方数はいくつ作れるか。
ただし、4桁でなくてもよい。

答え

!!OPTION ARITHMETIC RATIONAL !多桁整数
FOR N=1 TO 1000000 !検索範囲
   LET T=N*N*N
   DO WHILE T>0 !各位の数字を確認する
      LET W=MOD(T,10)
      IF NOT(W=1 OR W=2 OR W=7 OR W=8) THEN EXIT DO
      LET T=INT(T/10) !次へ
   LOOP
   IF T=0 THEN PRINT N; N*N*N !題意を満たす
NEXT N
END

 

Re: 中学生プログラミングコンテスト

 投稿者:山中和義  投稿日:2013年10月 4日(金)13時28分42秒
  > No.3155[元記事へ]

つづき

>  福島工業高等専門学校 情報処理教育センター
>
> 予想問題

問題
縦20マス、横13マスの長方形状のマス目が2つあります。
それぞれのマス目の各マスに以下のように1から260までの整数を書く時、
どちらのマス目でも同じ位置に書かれるような整数を全て求めなさい。

一方
  1   2   3  …   12  13
 14  15  16  …   25  26
 27  28  29  …   38  39
  :
 248 249 250  … 259 260

もう一方
 241 221  …  41  21  1
 242 222  …  42  22  2
 243 223  …  43  23  3
  :
 260 240  …  60  40  20

答え

LET P=20 !縦
LET Q=13 !横
FOR y=1 TO P !マスに数字を埋める
   FOR x=1 TO Q
      LET A=Q*(y-1)+x
      LET B=P*(Q-x)+y
      IF A=B THEN PRINT y;x; A
   NEXT x
NEXT y
END


参考
y行x列のマスの数値が等しいので、
Q(y-1)+x=P(Q-x)+yより、(P+1)x+(Q-1)y=(P+1)Q
よって、1≦y≦P、1≦x≦Qとして、不定方程式を解く。

具体的な数値を代入して、7x+4y=91(1≦y≦20、1≦x≦13)

FOR x=1 TO INT(91/7)
   LET y=(91-7*x)/4
   IF y=INT(y) THEN PRINT y;x; 13*(y-1)+x
NEXT x
END



-------------------------------------------

問題
分数 1/71 の小数部分を求めてください。

答え
1/71=0.01408450704225352112676056338028169… 循環節が35桁の循環小数となる。


LET P=10 !p進法
LET M=1 !m/n ※1≦m<n
LET N=71
PRINT "."; !小数点を表示する
LET R=M !筆算による割り算
LET K=0 !小数点第k位
DO
   LET K=K+1
   LET R=R*P !右側に0を補う
   PRINT INT(R/N); !商
   LET R=MOD(R,N) !あまり
LOOP UNTIL R=0 OR K=100 !割り切れる または 小数点第100位まで
IF R>0 THEN PRINT " … ";
PRINT
END


参考 循環節の性質
循環節の長さが偶数のとき、半分で切って足し合わせると、9が並ぶ。
例 1/7=0.{142857}の場合、142+857=999



-------------------------------------------

問題
7777秒は、何時間何分何秒でしょう。

答え
 60 ) 7777
    -------
 60 )  129 … 37
    -------
         2 … 9

LET S=7777
LET P=60
DO WHILE S>0 !60進法
   PRINT MOD(S,P) !秒、分、時間の順に表示される
   LET S=INT(S/P)
LOOP
END


小数の場合は、60をかけていけばよいので、
たとえば、0.357なら
  0.357
 ×   60
 -------
  21.42 ← 整数部と小数部を分離する
 ×   60
 -------
  25.2
 ×   60
 -------
  12.0

OPTION ARITHMETIC RATIONAL !有理数の計算 ※小数を正確に表すため
LET P=60
LET S=7777/P^3 !60進法3桁
DO
   LET S=S*P
   PRINT INT(S) !時間、分、秒の順に表示される
   LET S=S-INT(S) !整数部分を取り除く
LOOP UNTIL S=0 !小数部分がなくなるまで
END


参照
 問題
 分数 1/71 の小数部分を求めてください。



-------------------------------------------

問題
1から9までの数から異なる3個を使って、その和が15になるようにしてください。
例 1+5+9=15

FOR A=1 TO 9-2
   FOR B=A+1 TO 9-1
      FOR C=B+1 TO 9
         IF A+B+C=15 THEN PRINT A;"+";B;"+";C;"=";A+B+C
      NEXT C
   NEXT B
NEXT A
END

参考
 1 + 5 + 9 = 15
 1 + 6 + 8 = 15
 2 + 4 + 9 = 15
 2 + 5 + 8 = 15
 2 + 6 + 7 = 15
 3 + 4 + 8 = 15
 3 + 5 + 7 = 15
 4 + 5 + 6 = 15
となる8通りの式を得る。
数5の出現回数は、4回である。
数2,4,6,8の出現回数は、それぞれ3回である。
数1,3,7,9の出現回数は、それぞれ2回である。

よって、数5を中央、数2,4,6,8を4隅に置いて、
 2 9 4
 7 5 3
 6 1 8

3x3の魔方陣は対称性を除くと1通りである。



-------------------------------------------

問題
0から100までの範囲で、それぞれの平方数(2乗した数)の一の位を調べてください。

答え

FOR N=0 TO 100
   PRINT N; MOD(N*N,10)
NEXT N
END

 

戻る