ランダムな並び替えをするには?

解決


みかん  2002-08-01 15:19:11  No: 50288  IP: [192.*.*.*]

みかんと申します。
どなたかご教授お願いします。

トランプなどのカードをシャッフルする為に1〜52までの数値を
ランダムに並び替えたいのですが、どのような関数を使用した
ら良いでしょうか?
rand関数だと、1つの乱数しか求められないので・・・。

よろしくお願いいたします。

編集 削除
 2002-08-01 23:02:45  No: 50289  IP: [192.*.*.*]

> ランダムに並び替えたいのですが、どのような関数を使用した
> ら良いでしょうか?
そのような関数は無いのではないでしょうか?

アルゴリズム(rand関数を使って)を考えるしかないと思いますよ。

編集 削除
YuO  2002-08-02 13:51:16  No: 50290  IP: [192.*.*.*]

std::random_shuffle
を使えばOK。1〜52の値の入ったコンテナなり配列なりは自分で用意して下さい。

編集 削除
KT  2002-08-03 11:33:57  No: 50291  IP: [192.*.*.*]

#define CARDS 52

int temp,i,swap;

for(i=0; i < CARDS; ++i) {
    swap = rand() % CARDS;
    temp = cards[i];
    cards[i] = cards[swap];
    cards[swap] = temp;
}

編集 削除
みかん  2002-08-05 13:39:21  No: 50292  IP: [192.*.*.*]

YuOさん、KTさんサンプルありがとうございます。

KTさんのほうが簡単なので、試してみたところ
2回程処理を繰り返すと、ばっちりシャッフル
できました。

ありがとう御座いました。

編集 削除