我有以下情形:C#随机算法,直到满足条件
- 从一定范围内产生
n
数字随机数 - 总和的所有数字
- 检查是否
sum == x
(x为数字由用户设置) - 如果
sum != x
然后继续运行循环 - 如果
sum == x
,则显示随机数列表最高达到x
基于这个逻辑,我能够这样做,但它需要永远的实现结果,有没有更好的方法来解决这个问题?
static void Main(string[] args)
{
Console.WriteLine("starting...");
List<int> checkList = generate(5);
while(!checkSum(checkList, 100))
{
checkList = generate(5)
}
Console.WriteLine("done!");
}
private static bool checkSum(List<int> n, int sum)
{
if(n.Sum() == sum)
{
return true;
}
else
{
return false;
}
}
public static List<int> generate(int n)
{
Random rng = new Random();
List<int> list = new List<int>();
for (int i = 0; i < 5; i++)
{
//int ran = some random number
list.Add(ran);
}
return list;
}
EDIT
我在这里的情况是,以获得总计为100组合的数量是从输入由用户所采取的随机整数的n
组合。所以程序将给出n
数目的可能的组合,总结高达100
可能的组合:
- 25 + 37 + 9 + 20 + 9 = 100
- 46 + 21 + 13 + 8 + 12 = 100
您的场景是算法(解决方案),而不是问题。这种算法当然很慢,因为它采用了强力方法。你用一个更好的算法试图解决什么问题? – Tim
'它需要永远达到结果'很明显。有一种情况(所有项目= 20)将使您的条件成立。其实20是独家,所以我不知道这是如何完成。 – Jonesopolis
打印出不工作的序列(不仅仅是成功的序列),你会看到代码中的错误。 – Servy