如何从数组中选择具有相同总和的数字组

时间:2010-06-23 14:25:18

标签: c++ c

我有十个(或更多)数字的数组,例如:

arr[1,2,3,4,5,6,7,8,9,10]

我想要一种方法来检查此数组中的三个数字是否与另外三个数字具有相同的总和(我希望获得所有可能性!),例如:

{1.8.10}  {2.10.7}  {3.7.9}   {4.9.6}   {5.6.8}  {Sum of each set: 19}
{1.6.10}  {3.10.4}  {5.4.8}   {7.8.2}   {9.2.6}  {Sum of each set: 17}
{6.3.5}   {7.5.2}   {8.2.4}   {9.4.1}   {10.1.3} {Sum of each set: 14}

更新

这是我想要做的另一个例子:

alt text http://img208.imageshack.us/img208/1131/77603708.png

2 个答案:

答案 0 :(得分:2)

创建集合图。设置三重嵌套for循环并开始添加数字。每一笔钱都成为地图的关键。该集合是您使用的3个数字。应该只有十几行代码。


map<int,set<int> > sums;

for(int i=0; i<ARRAY_SIZE; i++)
{
  for(int j=0; j<ARRAY_SIZE; j++)
  {
    if(j <= i)
      continue;

    for(int k=0; k<ARRAY_SIZE; k++)
    {
      if(k <= i || k <= j)
        continue;

      int localSum = arr[i] + arr[j] + arr[k];
      set<int> thisSum;
      thisSum.insert(arr[i]);
      thisSum.insert(arr[j]);
      thisSum.insert(arr[k]);
      sums.insert(make_pair(localSum, thisSum));
    }
  }
}

只需遍历总和地图并根据需要显示您的设置。我对这里的继续逻辑不是100%肯定,但我认为这是正确的。这个想法会起作用,尽管它的复杂性至少是立方的。

答案 1 :(得分:-1)

map<int,set<int> > sums;
for(int i=0; i<ARRAY_SIZE; i++)
{
  for(int j=0; j<ARRAY_SIZE; j++)
  {
    if(j <= i)
      continue;

    for(int k=0; k<ARRAY_SIZE; k++)
    {
      if(k <= i || k <= j)
        continue;

      int localSum = arr[i] + arr[j] + arr[k];
      set<int> thisSum;
      thisSum.insert(arr[i]);
      thisSum.insert(arr[j]);
      thisSum.insert(arr[k]);
      sums.insert(make_pair(localSum, thisSum));
    }
  }
}