制作特殊组合(C+;+;) 我需要一些帮助解决C++问题。用户输入要输入的数字,然后输入所有数字和一个特殊值。程序必须找到并写入其和等于特殊值的所有数字组合。例如: 输入 12 1 5 7 3 10 8 9 2 4 6 11 13 15

制作特殊组合(C+;+;) 我需要一些帮助解决C++问题。用户输入要输入的数字,然后输入所有数字和一个特殊值。程序必须找到并写入其和等于特殊值的所有数字组合。例如: 输入 12 1 5 7 3 10 8 9 2 4 6 11 13 15,c++,arrays,loops,set,C++,Arrays,Loops,Set,输出: 4 11 2 13 9 6 9 2 4 3 2 4 6 3 8 4 3 10 2 7 2 6 7 8 5 4 6 5 8 2 5 10 5 7 3 1 8 6 1 8 2 4 1 10 4 1 3 11 1 3 9 2 1 7 3 4 1 5 9 1 5 3 6 1 5 3 2 4 1 5 7 2 4 11 2 13 9 6 9 2 4 3 2 4 6 3 8 4 3 10 2 7 2 6 7 8 5 4 6 5 8 2 5 10 5 7 3 1 8 6 1 8 2 4

输出

4 11 2 13 9 6 9 2 4 3 2 4 6 3 8 4 3 10 2 7 2 6 7 8 5 4 6 5 8 2 5 10 5 7 3 1 8 6 1 8 2 4 1 10 4 1 3 11 1 3 9 2 1 7 3 4 1 5 9 1 5 3 6 1 5 3 2 4 1 5 7 2 4 11 2 13 9 6 9 2 4 3 2 4 6 3 8 4 3 10 2 7 2 6 7 8 5 4 6 5 8 2 5 10 5 7 3 1 8 6 1 8 2 4 1 10 4 1 3 11 1 3 9 2 1 7 3 4 1 5 9 1 5 3 6 1 5 3 2 4 1 5 7 2 代码 下面是编写由2个元素组成的所有组合的代码:

#include <iostream> 
using namespace std;

int main(int argc, const char * argv[])
{
    int size;
    cout << "Enter size: ";
    cin >> size;
    int *numbers = new int[size];
    cout << "Enter numbers: ";
    for (int i = 0; i < size; i++)
        cin >> numbers[i];
    int target;
    cout << "Enter target: ";
    cin >> target;
    int sum = 0;
    for (int i = 0; i < size-1; i++)
    {
        for (int j = i+1; j < size; j++)
        {
            sum = numbers[i];
            sum += numbers[j];
            if (sum == target)
                cout << numbers[i] << " " << numbers[j] << "\n";
        }
    }
    return 0;
}
for (int i = 0; i < size-2; i++)
{
   for (int j = i+1; j < size-1; j++)
   {
      for (int k = j+1; k < size; k++)
      {
         sum = numbers[i] + numbers[j];
         sum += numbers[k];
         if (sum == target)
         cout << numbers[i] << " " << numbers[j] << " " << numbers[k] << "\n";
       }
    }
}
#包括
使用名称空间std;
int main(int argc,const char*argv[]
{
整数大小;
大小;
整数*数字=新整数[大小];
cout>数字[i];
int目标;
cout>目标;
整数和=0;
对于(int i=0;i从列表中选择第一个数字(例如,1)
  • 从您的列表中删除此数字,并从您的“目的地”总数中扣除
  • 现在您有了一个新的列表和一个新的目的地总数。重复
  • 如果您的总数超过目的地,请跳过当前数字(即,将数字保留在列表中,不更新目的地)并移至下一个
  • 如果列表中的其余项目都不允许您到达目的地,请弹出添加到目的地总数中的最后一个数字,并使用列表中的下一个数字进行更新
  • 如果达到目标总数,则原始列表中的数字子集(大小介于1和列表中的元素数之间)将与预期总数相加
  • 从列表中选择第一个数字(例如,1)
  • 从您的列表中删除此数字,并从您的“目的地”总数中扣除
  • 现在您有了一个新的列表和一个新的目的地总数。重复
  • 如果您的总数超过目的地,请跳过当前数字(即,将数字保留在列表中,不更新目的地)并移至下一个
  • 如果列表中的其余项目都不允许您到达目的地,请弹出添加到目的地总数中的最后一个数字,并使用列表中的下一个数字进行更新
  • 如果达到目标总数,则原始列表中的数字子集(大小介于1和列表中的元素数之间)将与预期总数相加

  • 输入集中可能有负数吗?因为我知道一个算法来解决这个问题,但它只有在输入集中没有负数时才起作用。@Blood:如果不是在注释中,他应该问什么?输入集中可能有负数吗?因为我知道一个算法来解决这个问题我有这个问题,但只有当输入集中没有负数时它才会起作用。@Blood:如果不是在评论中,他应该问什么?谢谢你的回答,但我不知道如何这样做。我发现一个俄罗斯论坛,一些人已经解决了类似的问题,如果你感兴趣,这里感谢你的回答,但是我不知道怎么做,我找到了一个俄罗斯论坛,一些人已经解决了一个类似的问题,如果你感兴趣,这里是
    for (int i = 0; i < size-2; i++)
    {
       for (int j = i+1; j < size-1; j++)
       {
          for (int k = j+1; k < size; k++)
          {
             sum = numbers[i] + numbers[j];
             sum += numbers[k];
             if (sum == target)
             cout << numbers[i] << " " << numbers[j] << " " << numbers[k] << "\n";
           }
        }
    }