1~5までの数字を
変数 int x1~x5
にランダムに入れたいと思っています。
例えば、
x1=2;
x2=5;
x3=3;
x4=1;
x5=4;
のような具合です。
乱数を使って上手い具合にコードが書けると思っていたのですが…思いつきません(汗)
このコードは、ゲームの中に組み込んで、起動するたびにx1~x5の値が変化するようにするつもりです。
また、いずれは1~25までに拡張したいと思っています。
どなたか、上手いコードを教えていただけないでしょうか…
ライブラリは DXライブラリです。
windows7
VC++2008
ランダムに数字を並べる
Re: ランダムに数字を並べる
X1~X5の部分を配列にすればさして問題はなくなると思いますね
但しx0という余計なデータが出来てしまいますが・・・
0~4までの数値を取得し、それに+1することで1~5の値を得ることが出来ます。
ただしこの方法を使った場合
x[1]=2
x[2]=1
x[3]=5
x[4]=2
x[5]=3
のように、同じ数値が出てくることもあります。
同じ数値が配置されると困る場合は、取得した数値をチェックし2度取得しないようにする必要があるでしょうね。
但しx0という余計なデータが出来てしまいますが・・・
0~4までの数値を取得し、それに+1することで1~5の値を得ることが出来ます。
ただしこの方法を使った場合
x[1]=2
x[2]=1
x[3]=5
x[4]=2
x[5]=3
のように、同じ数値が出てくることもあります。
同じ数値が配置されると困る場合は、取得した数値をチェックし2度取得しないようにする必要があるでしょうね。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
-
MASSA
Re: ランダムに数字を並べる
>jayさん
なるほど。
配列で全く問題はありません
ただ…同じ数字が入力されるのは困ってしまいます…
今のところ、いちいちチェックするのでも良さそうですが…将来的に、扱う数値の数が大きくなっていくと、かなりややこしいことになりそうです。
…もう少し汎用性の高いコードをいただけると、よりうれしいのですが…
なるほど。
配列で全く問題はありません
ただ…同じ数字が入力されるのは困ってしまいます…
今のところ、いちいちチェックするのでも良さそうですが…将来的に、扱う数値の数が大きくなっていくと、かなりややこしいことになりそうです。
…もう少し汎用性の高いコードをいただけると、よりうれしいのですが…
-
かずま
Re: ランダムに数字を並べる
MASSA さんが書きました: …もう少し汎用性の高いコードをいただけると、よりうれしいのですが…
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shuffle(int *x, int n)
{
int i, j, t;
for (i = 0; i < n; i++) {
j = rand() % 4;
t = x[i], x[i] = x[j], x[j] = t;
}
}
int main(void)
{
int i, x[] = { 1, 2, 3, 4, 5 };
srand(time(0));
shuffle(x, 5);
for (i = 0; i < 5; i++) printf(" %d", x[i]);
printf("\n");
return 0;
}
Re: ランダムに数字を並べる
同一の値を入れたくない場合だと,シャッフルするのがよいと思います。
[結] 2005年10月 - 結城浩の日記 # 音楽シャッフル・クイズ(解答編)を元に……。 あたりで動くかと。
[結] 2005年10月 - 結城浩の日記 # 音楽シャッフル・クイズ(解答編)を元に……。 あたりで動くかと。