重複無し乱数
Posted feedbacks - D
単純にシャッフルして作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import std.random;
int[] bingo(int x)
{
int[] xs;
for (int i = 1; i <= x; ++i) {
xs ~= i;
}
for (int i = 0; i < x; ++i) {
uint r = rand() % x;
int tmp = xs[r];
xs[r] = xs[i];
xs[i] = tmp;
}
return xs;
}
/*
import std.stdio;
import std.string;
void main(char[][] args)
{
for (int i = 1; i <= 10; ++i) {
int[] xs = bingo(i);
string s = "[";
foreach (j; xs) {
s ~= toString(j) ~ ",";
}
s = s[0 .. $ - 1] ~ "]";
writef("%s\n", s);
}
}
*/
|
D 2.008 で std.random に追加された機能を使っていますが、dmd 2.009 ではコンパイルできませんでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import std.stdio;
import std.random;
void bingo(uint n){
uint[] a;
a.length = n;
foreach(i, ref e; a){
e = i + 1;
}
randomShuffle(a, Random(unpredictableSeed()));
writefln(a);
}
void main(){
bingo(10);
}
|




raynstard
#3402()
Rating0/0=0.00
このお題はraynstardさんの投稿を元にしています。ご投稿ありがとうございました。 投稿の内容には表示のしかたも含まれていたのですが、 このお題では「重複しない1~nまでの乱数をどうやって作るか」という点に集中することにして、 結果の整形は続編としてこの後のお題で出すことにします。 サンプル入出力は下のようになります。
[ reply ]