ランダムに数字を並べる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MASSA

ランダムに数字を並べる

#1

投稿記事 by MASSA » 14年前

1~5までの数字を

変数 int x1~x5

にランダムに入れたいと思っています。

例えば、
x1=2;
x2=5;
x3=3;
x4=1;
x5=4;
のような具合です。

乱数を使って上手い具合にコードが書けると思っていたのですが…思いつきません(汗)
このコードは、ゲームの中に組み込んで、起動するたびにx1~x5の値が変化するようにするつもりです。
また、いずれは1~25までに拡張したいと思っています。


どなたか、上手いコードを教えていただけないでしょうか…

ライブラリは DXライブラリです。


windows7   
VC++2008

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

Re: ランダムに数字を並べる

#2

投稿記事 by jay » 14年前

X1~X5の部分を配列にすればさして問題はなくなると思いますね
但しx0という余計なデータが出来てしまいますが・・・

コード:

int x[6];

for(int n=1; n<=5; n++)
{
       x[n] = GetRand(4)+1;
}
0~4までの数値を取得し、それに+1することで1~5の値を得ることが出来ます。
ただしこの方法を使った場合
x[1]=2
x[2]=1
x[3]=5
x[4]=2
x[5]=3

のように、同じ数値が出てくることもあります。
同じ数値が配置されると困る場合は、取得した数値をチェックし2度取得しないようにする必要があるでしょうね。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

MASSA

Re: ランダムに数字を並べる

#3

投稿記事 by MASSA » 14年前

>jayさん

なるほど。
配列で全く問題はありません

ただ…同じ数字が入力されるのは困ってしまいます…

今のところ、いちいちチェックするのでも良さそうですが…将来的に、扱う数値の数が大きくなっていくと、かなりややこしいことになりそうです。


…もう少し汎用性の高いコードをいただけると、よりうれしいのですが…

かずま

Re: ランダムに数字を並べる

#4

投稿記事 by かずま » 14年前

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;
}

YuO
記事: 947
登録日時: 15年前
住所: 東京都世田谷区

Re: ランダムに数字を並べる

#5

投稿記事 by YuO » 14年前

同一の値を入れたくない場合だと,シャッフルするのがよいと思います。
[結] 2005年10月 - 結城浩の日記 # 音楽シャッフル・クイズ(解答編)を元に……。

コード:

void shuffle(int * array, int length)
{
    int i; /* C99なら各々のfor文の方で宣言すべきかと */
    for (i = 0; i < length; ++i) array[i] = i;
    for (i = 0; i < length - 1; ++i)
    {
        int r;
        int temp;
        r = i + rand() % (length - i); /* 手抜き。明らかに偏るので注意。 */
        temp = array[i];
        array[i] = array[r];
        array[r] = temp;
    }
}
あたりで動くかと。

かずま

Re: ランダムに数字を並べる

#6

投稿記事 by かずま » 14年前

訂正です。

コード:

    j = rand() % n;

MASSA

Re: ランダムに数字を並べる

#7

投稿記事 by MASSA » 14年前

>かずまさん
>YuOさん


ご丁寧にどうもありがとうございます!

早速試してみます。

閉鎖

“C言語何でも質問掲示板” へ戻る