一个难题?

时间:2010-05-31 19:24:06

标签: discrete-mathematics arithmetic-expressions

我尝试找到问题的解决方案.... 我们有一个例子: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;

3 个答案:

答案 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)效率,请牢记这一点。