【发布时间】:2017-07-22 16:04:01
【问题描述】:
我有以下场景:
- 生成
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;
}
编辑
我的场景是获得n 的随机整数组合,总和为 100。组合的数量取自用户输入。所以程序将给出n 的可能组合数,总和为 100。
可能的组合:
- 25+37+9+20+9 = 100
- 46+21+13+8+12 = 100
【问题讨论】:
-
你的场景是一个算法(解决方案),而不是一个问题。由于蛮力方法,该算法当然很慢。您试图用更好的算法解决的问题是什么?
-
it takes forever to achieve the result很明显。有一种情况(所有项目 = 20)将使您的条件为真。其实 20 是独家的,所以我不知道这是怎么结束的。 -
打印出不工作的序列(不仅仅是成功的序列),你会看到代码中的错误在哪里。
-
您可以通过将
rng.Next(5,20)更改为rng.Next(20,21)之类的名称来加快速度。 -
你在开玩笑吗?您甚至没有使用您发送的 int n 来生成。你期望 5 rng.Next(5, 20);总计 100。最大值 (20) 不包括在内。即使 20 包含在内,只有在 random 是每个值的最大值时才会总计。