• ベストアンサー

1-10をランダムに並べる

例えば、 1-10を 3 6 7 5 1 8 2 4 9 10 というように並べることは、できますでしょうか? Rand関数を使えばできますか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

でけます。 最初、10個のうちから1つ選ぶ。 次は、9個のうちから1つ選ぶ。(すでに選んだ数はパスすればよい) 次は、8個のうちから… と繰り返していきます。 1~10、もしくは1~9の乱数を作り出すには、 rand()を使います。

noname#6117
質問者

お礼

ありがとうございます。 ひと手間かかりますか。 その方針でやってみようと思います。

その他の回答 (2)

noname#9119
noname#9119
回答No.3

シャッフルするのが簡単。 配列に1から10まで並べる。 1番目の配列の中身を、1から10番目のうちランダムに選んだものと入れ替える。 2番目の配列の中身を~と10回入れ替えておしまい。

noname#6117
質問者

お礼

ありがとうございました。 srand(now);で、3分かかりましたので、 おかしいなぁと思いましたが、 修正できました。 ありがとうございます。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

1 0.23 2 0.75 3 0.11 9 0.72 10 0.69 と並べ替えたい数と乱数をセットにして、乱数の方をキーにソートとか。 ソートのアルゴリズムが利用できるのなら楽かも。

noname#6117
質問者

お礼

ありがとうございました。 srand(now);で、3分かかりましたので、 おかしいなぁと思いましたが、 修正できました。 ありがとうございます。 for(int a=0,int x=0;a<104;a++,x++) { time(&now); srand(now+a+x); ran[a]=1+rand()%104; for(int b=0;b<a;b++) { if(ran[a]==ran[b]) { a--; } } }

関連するQ&A