質問: 乱数みたいに 1から40までの数を順不同で出したいのです。 rand関数だと重なりができてしまいますよね。 それなしで、なにかよい関数・方法はございますでしょうか。 かつ、それを40通り作りたいのです。 きっとif関数とかを使うのでしょうが、私は思い浮かばないのです。 お願いいたします!
回答: rand()を使って、重なりを出さずに、1~40の配列を40作る一例です。 この方法は、最初に1~40の数字の配列を作成しておいて、 ランダムにその中から数字を選び、選ばれた数字をその配列から削除し、 残った数字の中からランダムに選び.....を繰り返すやり方です。 ほかにも色々なやり方がありますが、何か参考になれば、幸いです。 char buf[40][40]; char chk[40]; char now[40]; int n, i, k, cnt, rdt; for( n=0; n<40; ){ for( i=0; i<40; i++ ){ chk[i] = i+1; //取り出しテーブルの作成 } for( cnt=0,k=40; k>1; ){ do{ rdt = rand() % k; }while( rdt < 0 ); //取り出し位置の取得 now[cnt++] = chk[rdt]; //選択データの保存 k--; while( rdt < k ){ //選択データを外すループ chk[rdt] = chk[rdt+1]; rdt++; } } for( i=0; i