练习包括在给定x,y大小的情况下用用户生成2D地图,然后将表格中的随机项放置在地图的每个单元格上。 我在Items矩阵的[x,y]坐标中有一个单元格,我必须为该矩阵的每个单元格随机选择项目。
我必须从4个项目的表中选择随机项目,这些项目的概率以累积概率显示,并且具有此类项目的单元格可以具有1个以上的项目以及这些项目的不同组合。
考虑到在给定的作业表上有两个项目具有相同的概率,我真的不知道该如何解决这个问题。
这是给定的概率表:
Food - 1
Weapons - 0.5
Enemy - 0.5
Trap - 0.3
我的项目枚举:
[Flags]
enum Items
{
Food = 1<<0,
Weapon = 1<<1,
Enemy = 1<<2,
Trap = 1<<3
}
同样,预期输出是通过该百分比随机选择1个单元格中包含哪些项目。我想要作为答案的只是开始或解决此问题的方法,我仍然想自己尝试解决,请尽量避免使用完整的代码解决方案。
答案 0 :(得分:0)
如果两个项目具有相同的累积概率,则获取后一个项目的概率为0。仔细检查概率表,但如果正确,则“武器”不是要获取的有效选项。
但是一般来说。如果您可以“以某种方式”生成介于0和1之间的随机数,那么问题就容易了,对吗?如果有一些条件,则可以选择给定此随机数的选项之一。
通过一点搜索,您可以轻松地找到如何以所需的任何语言生成随机数。
答案 1 :(得分:0)
在这种类型的问题中,我发现使用整数更容易,因此我将使用:
string url = "https://..../search.json?query=abc:123";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var content = await client.GetStringAsync(url);
return JsonConvert.DeserializeObject<Object>(content);
}
总共有10 + 5 + 5 + 3 = 23个可能的选项。
大多数计算机RNG从0开始工作,因此按如下方式拆分23个选项(如0..22):
Food - 10
Weapons - 5
Enemy - 5
Trap - 3
依次解决各种可能性,并在达到所选选项时停止。我将使用伪代码,因为我的C ++非常生锈:
Food - 0..9 giving 10 options.
Weapons - 10..14 giving 5 options.
Enemy - 15..19 giving 5 options.
Trap - 20..22 giving 3 options.