我对这件事情都很陌生。我正在创建一个程序,提示用户输入一个名称,然后将该名称存储在一个数组中(数组大小为4),然后随机选择一个名称并显示它。
我想知道如何增加选择某个名字的机会,例如,我输入 鲍勃, 吉姆 约翰, 蒂姆 进入阵列,鲍勃有可能获得被选中的机会吗?我不确定从哪里开始或甚至做什么,我到处搜索过。
答案 0 :(得分:1)
此选项相当简单。
public class NameOption
{
public string Name { get; set; }
public int Weight { get; set; }
public NameOption(string name, int weight)
{
Name = name;
Weight = weight;
}
}
// Will need the System.Linq namespace declared in order to use the LINQ statements
public string PickName()
{
var nameOptions = new List<NameOption>
{
new NameOption("Bob",5),
new NameOption("John", 1),
etc...
};
// FYI - following won't work if Weight was a negative value or 0.
var namesToPickFrom = new string[nameOptions.Sum(x => x.Weight)];
var nameIndex = 0;
foreach (var option in nameOptions)
{
for (var i = 0; i < option.Weight; i++)
namesToPickFrom[nameIndex++] = option.Name;
}
var random = new Random();
return namesToPickFrom[random.Next(0, namesToPickFrom.Length-1)];
}
答案 1 :(得分:0)
容易---作弊。
不是选择一个数字(0-3),而是选择一个(0-4),如果得到4,则使用0。
答案 2 :(得分:0)
您还没有足够的搜索,因为这很容易,也是一个众所周知的概率问题。 为了保持尽可能简单,只需使用两个数组,一个带有名称,另一个带有正整数。
只要它们代表被选中的权重,整数具有什么值并不重要。这是概率的相对量度。
现在总结一下:
i = 0;
sum = 0;
while (i < prob.Length)
{
sum += prob[i];
}
pick = rnd.Next(sum); // 0..sum-1
i = 0;
while (pick >= prob[i])
{
pick -= prob[i];
i++;
}
// i is now the index of the name picked
答案 3 :(得分:0)
对于每个名称存储,将选择一个百分比。确保百分比加起来为100。 根据百分比为每个名称指定范围。
伪示例:
Bob = 50%
Jim = 10%
John = 20%
Tim = 20%
//Have your code assign Ranges Based on the percentage:
Bob: Low=1, High=50
Jim: Low=51, High=60
John: Low=61, High=80
Tim: Low=81, High=100
//Get a random number between 1 and 100. Use if-elses to return the matching name.