アプリ版:「スタンプのみでお礼する」機能のリリースについて

8 7 9 3 5 2 1 4 6
4 7 8 1 9 2 5 6 3
2 5 4 3 6 7 9 8 1
2 1 4 6 8 9 3 7 5
8 3 1 2 6 4 9 5 7
のような9桁の順列をランダムに発生するプログラムを十進BASICで作ったのですが、ものすごく遅いです(^O^)。
稀に数秒でできることもありますが、ほとんど15秒以上かかります。
 このコードではCでやっても遅いと思います。いい方法はないでしょうか?

DIM s(1 TO 9)

LET flg = 1
LET st = TIME
DO WHILE flg = 1
  RANDOMIZE
  FOR n = 1 TO 9
   LET s(n) = INT(RND*9+1)
  NEXT n
  FOR n = 1 TO 9 !ここが遅い原因
   FOR k = n+1 TO 9
     IF s(n) = s(k) THEN GOTO 100
   NEXT k
  NEXT n
  LET flg = 0
100
LOOP
  
  FOR n = 1 TO 8
    PRINT USING "# ": s(n);
  NEXT n
  PRINT USING "#": s(9);
  
  LET ed = TIME
  PRINT
  PRINT
  PRINT "所要時間 ";ed-st
END

A 回答 (1件)

こんにちは。



何となくですが、乱数で、取り合えず9個の数字を適当に入れて、それが、
1~9まで1つずつ使われているかをチェックしている様に感じます。

例えば、最初にLET s(n)に1~9までを入れて、乱数で、配列内の入れ替えを
してはダメでしょうか? それなら、同じ数字を使っているかのチェックが
不要になりますので、処理スピードは毎回同じ様になるかと思います。
    • good
    • 0
この回答へのお礼

> 初にLET s(n)に1~9までを入れて、乱数で、配列内の入れ替えを
> してはダメでしょうか? 
 ああ、なるほど!
 丁寧な回答まことにありがとうございました。

お礼日時:2022/11/16 13:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!