重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

学校の課題で「1≦x≦n、1≦y≦nの範囲の点(x,y)をランダム個数選び、(0,0)から見える点の個数を数えよ」という課題が出ました。
nは自由に設定し、入力する毎に選択する個数をランダムで決めxとyもその個数分選び、それらの中でGCD(x、y)=1となる点の個数を数える問題です。
参考としてランダムを表すプログラム

program seed_example(output);
var i,x:integer;
begin
x := seed(wallclock);
writeln('乱数の作成:');
for i := 1 to 10 do begin
writeln(random(0));
end;
end.
が与えられました。(上式のxは問題のxと無関係)
今回の問題では、選ぶ個数を「h」とすると
『h := seed(wallclock);(以下略)』と設定しランダム化させxとyは
『for x(or y) := 1 to h do(以下略)』としてh個選ぶ。

このような考え方で合っているのでしょうか?
回答お待ちしております。

A 回答 (1件)

h := seed(wallclock);


はおかしいです。これは、乱数の種を現在時刻で設定すると同時に、前回の乱数の種がhに返ります。
seedは乱数の種を設定するためのもので、実際に乱数を得るためのものではありません。

正しくは、
x := seed(wallclock);
とかして乱数の種を設定したあと、
h := random(0);
でランダムに個数を決めて、
さらに、
『for x(or y) := 1 to h do(以下略)』としてh個の点をランダムに選ぶ
にしないといけません。
    • good
    • 0
この回答へのお礼

ありがとうございます。乱数の種は適当に決められて、それをランダム化したい値に代入する必要があったのですね。

お礼日時:2007/11/07 23:01

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