【发布时间】:2026-02-22 05:40:01
【问题描述】:
所以,给你 10 个数字,你应该从中选择 5 个数字,这样总和就是 100。
现在,我显然尝试使用程序来解决它,并通过五个循环得到了明显的解决方案。但我只是想知道有没有有效的方法来做到这一点?
这是显而易见的先生:
static void Main(string[] args)
{
int[] a = { 2, 6, 10, 14, 18, 22, 26, 30, 34, 38 };
for (int f = 0; f < a.Length - 4; f++)
{
for (int s = f+1; s < a.Length - 3; s++)
{
for (int t = s+1; t < a.Length - 2; t++)
{
for (int fr = t + 1; fr < a.Length - 1; fr++)
{
for (int ft = fr + 1; ft < a.Length; ft++)
{
int sum = a[f] + a[s] + a[t] + a[fr] + a[ft];
Console.WriteLine(sum);
if (sum == 100)
{
Console.WriteLine("---------------------------------------");
Console.WriteLine(a[f]);
Console.WriteLine(a[s]);
Console.WriteLine(a[t]);
Console.WriteLine(a[fr]);
Console.WriteLine(a[ft]);
Console.WriteLine("---------------------------------------");
}
}
}
}
}
}
Console.ReadLine();
}
【问题讨论】:
-
你忘了
python标签.. -
似乎是动态编程的工作。也许是背包问题的一种变体?
-
可能重复? *.com/questions/4632322/… 几乎涵盖了这门语言中的所有语言,虽然我没有看到 C++
-
如果您标记每种语言,您可能只想用算法标记它并使其与语言无关。
-
我看不出那些势利的 cmets 的原因,这是一个通用的 CS 问题,与语言无关。对 OP:这是一个 NP-Complete 问题,无论你用什么方法解决它,你都会得到指数级的复杂性。当然,除非你使用某种近似算法。
标签: algorithm language-agnostic logic