#実現したいこと
C#の乱数宣言(0~7)を行いましたが、特定の数字だけめったに生成されないように頻度の調整を行いたいです。
頻度調整の対象になる数字1~3です。
各数字ごとに調整を行いたいです。
###方法など
1つの乱数で実装することは可能ですか?
1つの乱数で実装出来ないなら、複数の乱数を組み合わせて実装したいと考えています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答2件
0
特定の数字だけ登場頻度の少ないリストを作って、
そこから値を取り出すためのインデックスを乱数で生成する、とかですかね。
csharp
1// 1,2,3だけ登場頻度の少ないリスト 2List<int> source = new List<int>() {0, 0, 0, 1, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7}; 3 4Random random = new Random(); 5int randomIndex; 6int randomValue; 7 8// 確認 9for ( int i = 0; i < 100; i++ ) 10{ 11 randomIndex = random.Next(source.Count); 12 randomValue = source[randomIndex]; 13 Console.WriteLine(randomValue); 14} 15
投稿2017/02/02 06:41
総合スコア2019
0
algさんの回答が完璧すぎるので、ちょっと違う回答もしてみました。
0から7のように少ない範囲で特定の数字だけ確率を下げる場合はalgさんの投稿でよいですが、0から1000の内、1,2,3だけ確立を下げるような場合には大変なので、そこを改善してみました。
日本語のクラス名と変数名に関してのツッコミは無しでお願いします。
C#
1using System; 2using System.Collections.Generic; 3 4namespace ConsoleApplication4 5{ 6 class 確率調整 7 { 8 public int 出た回数 { get; set; } 9 public int 出にくさ { get; set; } 10 } 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 Dictionary<int, 確率調整> list = new Dictionary<int, 確率調整>() 16 { 17 {1,new 確率調整{ 出た回数 = 0, 出にくさ = 7}}, 18 {2,new 確率調整{ 出た回数 = 0, 出にくさ = 10}}, 19 {3,new 確率調整{ 出た回数 = 0, 出にくさ = 11}}, 20 }; 21 22 Random random = new Random(); 23 int randomValue; 24 for ( int i = 0; i < 100; i++ ) 25 { 26 randomValue = random.Next(7+1); 27// randomValue = random.Next(1000+1); 28 if (list.ContainsKey(randomValue)) 29 { 30 list[randomValue].出た回数++; 31 if (list[randomValue].出にくさ <= list[randomValue].出た回数) 32 { 33 list[randomValue].出た回数 = 0; 34 } 35 else 36 { // 再発行 37 i--; 38 continue; 39 } 40 } 41 Console.WriteLine(randomValue); 42 } 43 } 44 } 45}
投稿2017/02/02 16:42
編集2017/02/02 16:46総合スコア648
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/02 07:00 編集
2017/02/02 07:20