• 締切済み

C言語のプログラミング初心者です。

以下のプログラムの組み方をおしえてください。 1から10までの数字ひとつずつをランダムにならべるプログラム。 解答込みで解説お願いします。

みんなの回答

  • ken2r
  • ベストアンサー率25% (1/4)
回答No.6

完璧な乱数を出すのは困難なことと 乱数の計算に剰余を使うのがミソだと思います。 以下、参考にして下さい。 void main(void) { srand((unsigned)time(NULL)); int flag[11]; memset(flag, NULL, sizeof(flag)); int count = 0; while (count < 10) { int r = rand() % 10 + 1; if (flag[r] == 0) { printf("%d ", r); flag[r] = 1; count ++; } } }

すると、全ての回答が全文表示されます。
  • TT414
  • ベストアンサー率18% (72/384)
回答No.5

jactaさん ≻srand((time_t)time(NULL)); 100%無駄なキャストです、intまたはunsigned intにするのはともかくtime_tにしてどうするのでしょう? >> ひとつずつ >とのことのなので、実行するたびに結果をひとつずつ出力しています(1行にひとつだけ並べています)。 1回目と2回目を1秒以内で実行すると、50%の確率で同じものが出ます。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

#include <stdlib.h> #include <time.h> #include <locale.h> #include <wchar.h> #include <stdio.h> int main(void) { wchar_t const *digits[] = { L"\uff11", L"\uff12", L"\uff13", L"\uff14", L"\uff15", L"\uff16", L"\uff17", L"\uff18", L"\uff19", L"\uff11\uff10", }; srand((time_t)time(NULL)); int d = rand() % (int)(sizeof digits / sizeof digits[0]); setlocale(LC_CTYPE, ""); fputws(digits[d], stdout); } 以下、解説です。 > 1から10までの数字 ということなので、明示的に\uff11から\uff11\uff10のように全角文字を使いました。 > ひとつずつ とのことのなので、実行するたびに結果をひとつずつ出力しています(1行にひとつだけ並べています)。

すると、全ての回答が全文表示されます。
回答No.3

因みに、ANo.2の回答例は「悪い回答」になります。 1~10では、あまり影響がありませんが、1~1000とかになると問題が出ます。 例えば、1~999まで出て、あと1個、1000番目がなかなか出ないと(つまり、格納済みの場所ばかりが乱数に出て、空いている場所が乱数に出ないと)、何時まで経っても最後の1個が終わりません。 なので、本当は、1~10まで順に格納してから「グチャグチャに混ぜ合わす」のが良いです。 個数の数倍回くらい混ぜれば、それなりに混ざるはずです。

すると、全ての回答が全文表示されます。
回答No.2

やり方は色々ある。以下は一例。 1.要素数が10個の配列を用意して、10とも0に初期化する。 2.forループで3.~6.の処理を1~10まで回す。 3.乱数で0から9までの数字を作る。 4.作った乱数をインデックスにして要素を調べる。 5.要素の中身が0なら、今のループカウンタを格納して次に進む。 6.要素の中身が0じゃないなら、3.に戻る。 int idx; int loop; int array[10]; for (idx=0;idx<10;idx++){  array[idx]=0; } for (loop=1;loop<=10;){  idx=0から9までの乱数;  if(array[idx] == 0) {   array[idx] = loop++;  } }

すると、全ての回答が全文表示されます。
  • jintoku
  • ベストアンサー率30% (4/13)
回答No.1

過去回答によいのがありました。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1342450923 1~10とのことでベストアンサーのサンプルをそのまま使用できると思いますよ。

参考URL:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1342450923
すると、全ての回答が全文表示されます。

関連するQ&A