2

1 から 3 までのランダムな整数を生成する関数 rand(3) があります。この関数を使用して、1 から 9 までのランダムな整数を生成する別の関数 rand(9) を作成します。

4

2 に答える 2

21

簡単な解決策は次のとおりです。

rand(3) + 3*(rand(3) - 1)

このようにしたい理由は、1から9までのすべての可能な値に均等に分散するためです。

一部の人々はただやりたくなるかもしれませんrand(3) * rand(3)が、それは実際にはいくつかの数を生成しません-たとえば、7。また、生成する数値を不均等に分散します

同様に、一部の人はそうするかもしれませんがrand(3) + rand(3) + rand(3)、これもすべての数を生成するわけではなく(1または2を生成することはありません)、不均衡な頻度で他の数を生成します(5は9よりもはるかに頻繁に生成されます)。

于 2012-08-12T04:17:55.797 に答える
1

rand(3) を 2 回使用すると、3^2 の整数のペア、つまり (1,1)、(1,2)、...、(3,3) を生成できます。各ペアを値 [1,9] のいずれかに割り当てると (たとえば、(1,1) を 1 に、(1,2) を 2 に、など)、rand(9) が得られます。記号的に: rand(9):=(rand(3),rand(3))。

于 2012-08-13T04:21:51.777 に答える