C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 乱数で一部除外したい。


(過去ログ 105 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■62717 / inTopicNo.1)  乱数で一部除外したい。
  
□投稿者/ cielo (3回)-(2011/10/30(Sun) 00:55:48)

分類:[C#] 

開発環境『XP/SP3 VisualC#2008Express』

1-16までの乱数を生成しているのですが、13だけを選択から除外したいのですが可能でしょうか?
検索してみたのですが、除外する方法が見つかりませんでした。

初歩的なことかとは思いますが、御回答よろしくお願い致します。
引用返信 編集キー/
■62718 / inTopicNo.2)  Re[1]: 乱数で一部除外したい。
□投稿者/ 魔界の仮面弁士 (2395回)-(2011/10/30(Sun) 01:38:10)
No62717 (cielo さん) に返信
> 1-16までの乱数を生成しているのですが、13だけを選択から除外したいのですが可能でしょうか?

案1) 1〜15 までの乱数を生成し、13以上の値が出た場合は、さらに +1 した値を利用する。
案2) 1〜16 までの乱数を生成し、13 が出た場合は 13 以外が出るまで再生成する。
案3) 1〜12,14〜16 という値を配列等に保持しておき、乱数を用いて配列内の n 番目の値を取り出す。
引用返信 編集キー/
■62719 / inTopicNo.3)  Re[1]: 乱数で一部除外したい。
□投稿者/ Azulean (865回)-(2011/10/30(Sun) 01:38:14)
No62717 (cielo さん) に返信
> 1-16までの乱数を生成しているのですが、13だけを選択から除外したいのですが可能でしょうか?
> 検索してみたのですが、除外する方法が見つかりませんでした。

1.1-15 の乱数を作る。
2.乱数の関数から得られた結果を確認し、13 以上であれば +1 する。

or

1.1-12,14-16 を入れた配列を作っておく。
2.0 〜 配列の要素数 - 1 の乱数を生成し、配列から結果を得る。

これじゃだめですか?


引用返信 編集キー/
■62721 / inTopicNo.4)  Re[1]: 乱数で一部除外したい。
□投稿者/ επιστημη (2675回)-(2011/10/30(Sun) 01:44:30)
επιστημη さんの Web サイト
> 1-16までの乱数を生成しているのですが、13だけを選択から除外したいのですが可能でしょうか?

得られた乱数が13だったら再挑戦すりゃええかと。

using System;
using System.Diagnostics;

class Program
{
    static Random generator = new Random();

    // 1以上16以下の乱数
    static int rand()
    {
        return generator.Next(16) + 1;
    }

    static int valid_rand(Func<int, bool> valid)
    {
        int result;
        // 条件を満たす値が得られるまで繰り返す
        do
        {
            result = rand();
        } while (!valid(result));
        return result;
    }

    static void Main(string[] args)
    {
        for (int i = 0; i < 100; ++i)
        {
            int result = valid_rand(x => x != 13); // 与える条件:13でない
            Debug.Assert(result != 13);
            Debug.Assert(result >= 1 && result <= 16);
            Console.Write("{0} ", result);
        }

    }
}

引用返信 編集キー/
■62723 / inTopicNo.5)  Re[1]: 乱数で一部除外したい。
□投稿者/ shu (1058回)-(2011/10/30(Sun) 07:34:18)
No62717 (cielo さん) に返信
1以上16未満の乱数を発生させ、13がでたら16に置き換える。
引用返信 編集キー/
■62724 / inTopicNo.6)  Re[2]: 乱数で一部除外したい。
□投稿者/ cielo (4回)-(2011/10/30(Sun) 11:31:23)
皆様、返信ありがとうございます。

1〜15 までの乱数を生成し、13以上の値が出た場合は、さらに +1 する。
という方法で実現できました。

ちょっと考えれば思いつきそうなものですが、恥ずかしい限りです。
皆様本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -