我正在尝试计算7位数字的所有组合。每个数字基本上可以占据两个值,这就是我称之为二进制数的原因。
数字由FNMSDPL表示。基本上我想要所有值的组合及其总和。
我写了下面的代码,但它不起作用。
F[0] = 9.29;
F[1] = -4.47;
N[0] = 9.64;
N[1] = -5.77;
M[0]= -7.48;
M[1] = -2.13;
S[0] = 25.85;
S[1]= -3.55;
D[0]= 12.14;
D[1] = -4.90;
P[0] = 8.65;
P[1]= -0.85;
L[0] = 9.14;
L[1]= -1.73;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
for (int l = 0; l < 2; k++)
{
for (int m = 0; m < 2; m++)
{
for (int n = 0; n < 2; n++)
{
for (int o = 0; 0 < 2; o++)
{
double count = F[i] + M[j] + L[k] + S[l] + D[m] + P[n] + L[o];
System.Console.WriteLine(count);
}
}
}
}
}
}
}
错误讯息:
索引超出了数组的范围。
我在“double count =”行收到上述错误。
答案 0 :(得分:3)
Stack Overflow上的字体选择可能已解决了这个问题
for (int o = 0; 0 < 2; o++)
条件应该使用o
而不是0
。 (提示:避免使用o
或O
作为变量名称。)
修改:此处的另一个问题(应该是l
递增,而不是k
):
for (int l = 0; l < 2; k++)
答案 1 :(得分:2)
我想这不会按预期工作:
for (int l = 0; l < 2; k++)
答案 2 :(得分:1)
你应该使用比7个嵌套for
循环更聪明的东西(因为,正如其他答案所指出的那样,这非常容易出错,特别是当你必须组成14个变量名时)。递归解决方案在这里做得很好。
至于总和,你不需要产生所有可能性来知道所有128个可能数字的总和。注意每个二进制数字(0或1)在每个插槽中恰好出现64次,因此总和只是数组中14个浮点数之和的64倍。