我尝试找到问题的解决方案.... 我们有一个例子:20 ... 我们有6个数字:{a,b,c,d,e,f}< 20, 尝试找到这些数字的所有值,但前提是我们可以组合(whit +或 - )whit这个数字并将所有值降到20:例如
我们选择31:
a = 22 b = 21 c = 14 d = 11 e = 9 f = 5
我们有: 22 - 21 = 1; 11 - 9 = 2; 14 - 11 = 3; 9 - 5 = 4; f = 5; 11 - 5 = 6; 21 - 14 = 7; .... .... .... .... .... 21 + 9 = 30; 9 + 22 = 31;答案 0 :(得分:5)
这看起来像是家庭作业,所以我会尝试给你一些提示。
您希望循环遍历数组中两个数字的所有组合。要做到这一点,你可以使用一个循环遍历所有数字然后在循环内部的外循环,一个内循环也循环遍历所有数字。
根据您的具体要求,您需要决定是否要与x, y
分开处理y, x
答案 1 :(得分:1)
给定一个自然数 n ,找到6个正整数的所有组合 a , b , c , d , e 和 f ,以便{ a , b , c , d , e , f }∪{ a + b < / em>, a + c ,..., a + f , b + c , b + d ,..., b + f ,..., e + f }∪{ a - b , a - c ,..., a - f , b - c , b - d ,..., b - f ,..., e - f , b - a , c - a , ..., f - a , c - b , d - < em> b ,..., f - b ,..., f - e }包含1,2,3,4,..., n - 1和 n 。
我没有想过这个问题,但在我看来确实是一个难题。也许有一个技巧,我不确定,但如果我必须解决这个问题,我会首先尝试找到 n ,其中不无限 - 许多解决方案(例如,如果 n 为1,则包含两个连续自然数的6个自然数的任意组合将起作用)。
我认为在数学讨论论坛中找到这个问题的解决方案会有更好的运气。
答案 2 :(得分:0)
void FindCombinations(int n, int [] values)
{
for(int i = 0; i < values.length; i++)
{
int left = values[i];
for(int j = 0; k < values.length; j++)
{
int right = values[j];
if (left == right)
continue;
if (left + right < n)
Console.Write(string.Format("{0} + {1} = {2} < {3}", left, right, left+right, n);
if (left - right < n)
Console.Write(string.Format("{0} - {1} = {2} < {3}", left, right, left-right, n);
}
}
}
虽然这个问题很难找到家庭作业,但实际上并不那么难(虽然难以解释)。
注意:此解决方案为O(n^2)
且效率,请牢记这一点。