对不起这个简单的问题。但我是初学者。 我试图找到那些总和为0的子集,这些子集的数字在数组中。
我的子集有什么问题。长度。我已经调整了它,我认为逻辑很好。但每次拍摄System.IndexOutOfRangeException
。我试过了subset.Length-1
。结果没有改变。
例外情况在if (subset[m] == 0)
语句的行中给出。
感谢。
int[] subset={-3,-2,1,1,8} // the sum of -2, 1 and 1 is 0
for (int i = 0; i < subset.Length; i++)
{
for (int j = 0; i < subset.Length; j++)
{
for (int k = 0; i < subset.Length; k++)
{
for (int l = 0; i < subset.Length; l++)
{
for (int m = 0; i < subset.Length; m++)
{
if (subset[m] == 0)
{
Console.WriteLine("The subset of sum of zero:{0}", subset[m]);
}
if (subset[l] + subset[m] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1}", subset[m], subset[l]);
}
if (subset[l] + subset[m] + subset[k] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1},{2}", subset[m], subset[l], subset[k]);
}
if (subset[l] + subset[m] + subset[k] + subset[j] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1},{2}", subset[m], subset[l], subset[k], subset[j]);
}
if (subset[l] + subset[m] + subset[k] + subset[j] + subset[i] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1},{2},{3}", subset[m], subset[l], subset[k], subset[j], subset[i]);
}
答案 0 :(得分:2)
这是一个逻辑错误:
for (int i = 0; i < subset.Length; i++)
{
for (int j = 0; i < subset.Length; j++)
{
for (int k = 0; i < subset.Length; k++)
{
for (int l = 0; i < subset.Length; l++)
{
for (int m = 0; i < subset.Length; m++)
它应该是:
for (int i = 0; i < subset.Length; i++)
{
for (int j = 0; j < subset.Length; j++)
{
for (int k = 0; k < subset.Length; k++)
{
for (int l = 0; l < subset.Length; l++)
{
for (int m = 0; m < subset.Length; m++)
答案 1 :(得分:0)
请注意 for 循环中的条件:始终为i < subset.Length
。但您应该与相应的循环变量进行比较: j , k , l 或 m 。 (Copy'n'paste错误?)
在你的代码中,j / k / l / m的 for 循环是无限的,因为当这些循环迭代时, i 永远不会递增...
答案 2 :(得分:0)
您的for循环终止条件始终为i < subset.Length
,将其更改为相关的迭代变量,即for (int m = 0; m < subset.Length; m++)
for (int j = 0; j < subset.Length; j++)
{
for (int k = 0; k < subset.Length; k++)
{
for (int l = 0; l < subset.Length; l++)
{
for (int m = 0; m < subset.Length; m++)