C言語関係掲示板

過去ログ

No872 重複しない乱数

[戻る] [ホームページ]
No.11295

質問があります
投稿者---ぺこ(2003/12/18 20:04:57)


僕はC言語を始めたばかりの初心者です。
今、重複しない乱数を発生させて表示させるプログラムを作りたいのですが、
過去ログなどを参考にして作ってみましたがうまくいきませんでした。
どなたか教えていただけませんか?

No.11296

Re:質問があります
投稿者---なお(2003/12/18 20:10:16)


>過去ログなどを参考にして作ってみましたがうまくいきませんでした。

どの程度までつくりましたか?
できれば、ソースを載せたほうがよいです。

No.11297

Re:重複しない乱数
投稿者---shu(2003/12/18 20:26:17)


http://www9.plala.or.jp/sgwr-t/c/sec07.html#s7-4

の rand() についての記述と(詳細)のリンク先が参考になると思います。



No.11304

Re:質問があります
投稿者---あかま(2003/12/18 23:13:17)


#include <stdio.h>
#include <stdlib.h>
#define MAX 100

main(){
    int a[MAX]={0};
    int cnt,i;
    srand(time(NULL));
    for(cnt=0;cnt < MAX;){
        i = rand()%MAX;
        if(a[i] == 0){
            a[i] = 1;
            printf("%d\n",i);
            cnt++;
        }
    }

}


main(){
    int a[MAX];
    int buf,i,j;
    
    for(i = 0;i < MAX;i++) a[i] = i;
    for(i = 0;i < MAX;i++){
        j = rand()%MAX;
        buf = a[i];
        a[i] = a[j];
        a[j] = buf;
    }
    
    for(i = 0;i < MAX;i++) printf("%d\n",a[i]);
}

お好きな方をお使いください。
突然ですがここで問題です!どちらのプログラムの方が軽いでしょう?
最後にこれだけ答えてもらえるとうれしいな。


No.11313

Re:質問があります
投稿者---ぺこ(2003/12/19 12:28:53)


>お好きな方をお使いください。
>突然ですがここで問題です!どちらのプログラムの方が軽いでしょう?
>最後にこれだけ答えてもらえるとうれしいな。

あかまさん教えていただいてありがとうございました。
参考にさせていただきました。
質問の答えなんですが、まだ私はc言語を学び始めたばかりで間違っているかもしれませんが、for文の2重ループを用いている下のプログラムより上のプログラムのほうが軽いと思うのですがあっていますか?



No.11314

Re:重複しない乱数
投稿者---NykR(2003/12/19 13:45:20)


>for文の2重ループを用いている下のプログラムより上のプログラムのほうが軽いと思うのですがあっていますか?

下のプログラムに2重ループはありませんよ。

No.11316

Re:質問があります
投稿者---あかま(2003/12/19 14:11:16)


2重ループはないですw
乱数生成にかかったループの回数を比較するとわかりやすいかな。

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

main(){
    int a[MAX]={0};
    int cnt,i,loop=0;
    srand(time(NULL));
    for(cnt=0;cnt < MAX;){
        i = rand()%MAX;
        if(a[i] == 0){
            a[i] = 1;
            printf("%d\n",i);
            cnt++;
        }
        loop++;
    }
    printf("ループ回数は%d回\n",loop);

}

main(){
    int a[MAX];
    int buf,i,j,loop=0;
    
    for(i = 0;i < MAX;i++){
         a[i] = i;
         loop++;
    }
    for(i = 0;i < MAX;i++){
        j = rand()%MAX;
        buf = a[i];
        a[i] = a[j];
        a[j] = buf;
        loop++;
    }
    
    for(i = 0;i < MAX;i++) printf("%d\n",a[i]);
    printf("ループ回数は%d回\n",loop);
}




No.11322

Re:質問があります
投稿者---ぺこ(2003/12/19 16:53:06)


あかまさん、返信ありがとうございます。

早速ループ回数を比べたところ下のほうが軽いということがわかりました。
勉強になりました。