C言語 同じ数がないように乱数を作りたいです。

たとえば
srand((unsigned)time(NULL));
int ransu1=rand()%53;
int ransu2=rnad()%53;
int ransu3=rnad()%53;
int ransu4=rnad()%53;
int ransu5=rnad()%53;
としたとします。
このransu1から5までの数を全て違うようにしたいのですが、どのようにすればよいのでしょうか。
こんなものを作ってみましたが、意味がありませんでした。
void kaburicheck(){
srand((unsigned)time(NULL));
while(1){
if(ransu1==ransu2 || ransu1==ransu3 || ransu1==ransu4 || ransu1==ransu5 || ransu2==ransu3 || ransu2==ransu4 || ransu2==ransu5 || ransu3==ransu4 || ransu3==ransu5 || ransu4==ransu5){
ransu1=rand()%53;
ransu2=rand()%53;
ransu3=rand()%53;
ransu4=rand()%53;
ransu5=rand()%53;
}
else
break;
}
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/04 22:52:40
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:deflation No.1

回答回数1036ベストアンサー獲得回数126

ポイント60pt

こんな形ではどうでしょうか。

#define TRUE 1
#define FALSE 0

int tmp[6], i, j, flag;
srand((unsigned)time());

for (i = 1; i <= 5; i++) {
    flag = TRUE;
    while (flag) {
        flag = FALSE;
        tmp[i] = rand() % 53;
        for (j = 1; j < i; j++) {
            if (tmp[j] == tmp[i]) {
                flag = TRUE;
                break;
            }
        }
    }
}
int ransu1 = tmp[1];
int ransu2 = tmp[2];
int ransu3 = tmp[3];
int ransu4 = tmp[4];
int ransu5 = tmp[5];

その他の回答2件)

id:deflation No.1

回答回数1036ベストアンサー獲得回数126ここでベストアンサー

ポイント60pt

こんな形ではどうでしょうか。

#define TRUE 1
#define FALSE 0

int tmp[6], i, j, flag;
srand((unsigned)time());

for (i = 1; i <= 5; i++) {
    flag = TRUE;
    while (flag) {
        flag = FALSE;
        tmp[i] = rand() % 53;
        for (j = 1; j < i; j++) {
            if (tmp[j] == tmp[i]) {
                flag = TRUE;
                break;
            }
        }
    }
}
int ransu1 = tmp[1];
int ransu2 = tmp[2];
int ransu3 = tmp[3];
int ransu4 = tmp[4];
int ransu5 = tmp[5];
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント20pt

下記参照してみてください

http://www.programming-magic.com/20080824234424/

id:a-kuma3 No.3

回答回数4973ベストアンサー獲得回数2154

ポイント20pt

53 ってことは、トランプをイメージしてるんですよね。

山から5枚取る、というのを重複しない乱数5個、としたいのでしょうけど、

「山から5枚取る」というのを、そのまま実装する、というのではどうですか?


#include &lt;stdlib.h&gt;

const int N_SHUFFLE = 100;

/* カードをシャッフル */
void shuffle(int n_card, int card[]) {
    int i;
    for (i = 0 ; i < N_SHUFFLE ; ++i) {
        int j = rand() % n_card;
        int k = rand() % n_card;
        int tmp;
        tmp = card[j];
        card[j] = card[k];
        card[k] = tmp;
    }
}

int main(void) {
    const int N = 53;
    int cards[N];
    int i;

    srand(time());

    /* カードの準備 */
    for (i = 0 ; i < N ; ++i) {
        cards[i] = i;
    }

    /* 山をシャッフル */
    shuffle(N, cards);

    /* 上から5枚取る */
    printf("%d\n", cards[0]);
    printf("%d\n", cards[1]);
    printf("%d\n", cards[2]);
    printf("%d\n", cards[3]);
    printf("%d\n", cards[4]);

    return 0;
}

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません