-6

我尝试找到一个问题的解决方案....我们有一个数字,例如:20 ...我们有 6 个数字:{ a ,b , c , d , e , f} < 20 , t 尝试找到这些数字的所有值,但前提是我们可以组合(whit + 或 -)这个数字中的 2 个并将以下所有值变为 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;

4

3 回答 3

5

这看起来像家庭作业,所以我会尽量给你一些提示。

您想遍历数组中两个数字的所有组合。为此,您可以使用一个循环遍历所有数字的外循环,然后在该循​​环内使用一个也循环遍历所有数字的内循环。

根据您想要做什么,您需要决定是否要x, y单独处理y, x

于 2010-05-31T19:33:50.947 回答
1

给定一个自然数n,找出 6 个正整数abcdef的所有组合,满足 { a , b , c , d , e , f } ∪ { a + b , 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 - b , ..., f - b , ..., f-e } 包含 1、2、3、4、...、n - 1 和n

这个问题我没怎么想过,但在我看来确实是个难题。也许有一个技巧,我不确定,但如果我必须解决这个问题,我会首先尝试找到没有无限多解决方案的最小n (例如,如果n1,那么任何组合包含两个连续自然数的 6 个自然数将起作用)。

我认为在数学讨论论坛中找到解决此问题的方法会更好。

于 2010-05-31T20:12:29.163 回答
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)且无效,请记住这一点。

于 2010-05-31T19:54:51.630 回答