たとえば
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;
}
}
こんな形ではどうでしょうか。
#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];
こんな形ではどうでしょうか。
#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];
53 ってことは、トランプをイメージしてるんですよね。
山から5枚取る、というのを重複しない乱数5個、としたいのでしょうけど、
「山から5枚取る」というのを、そのまま実装する、というのではどうですか?
#include <stdlib.h> 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; }
コメント(0件)