进行特殊组合(C++)
Making special combinations (C++)
我需要一些帮助来解决C++问题。用户输入他要输入的数字数,然后输入所有数字和一个特殊值。程序必须查找并写入总和等于特殊值的所有数字组合。例:
输入
121 5 7 3 10 8 9 2 4 6 11 1315
输出:
4 112 139 69 2 43 2 4 63 8 43 10 27 2 67 85 4 65 8 25 105 7 31 8 61 8 2 41 10 41 3 111 3 9 21 7 3 41 5 91 5 3 61 5 3 2 41 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;
}
如果我用这个循环替换它,程序将编写由 3 个元素组成的所有组合:
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";
}
}
}
这是我的问题:如何制作一个编写所有可能组合的程序?
- 从列表中取第一个数字(例如,1)。 从
- 列表中删除此号码,并将其从"目的地"总数中扣除。
- 现在,您有一个新的列表和一个新的目标总计。 重复。
- 如果您的总数超过目的地,请跳过当前数字(即保留列表中的数字,不要更新目的地)并移至下一个数字。
- 如果列表中的其余项目都无法到达目的地,请弹出您添加到目的地总数中的最后一个数字,然后使用列表中的下一个数字更新它。
- 如果您达到目标总数,则原始列表中的数字子集(大小介于 1 和列表中的元素数之间)加起来就是您的预期总数。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 检查向量是否具有所有可能的字符组合
- 如何在加密++中将两个源组合成新的源
- 根中的组合
- 更改 C++ 中的组合分类变量
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 组合字符串不适用于 libCurl,C++
- 测试两个类型列表中的所有组合
- 将多个 for 循环组合成单个迭代器
- 如何从组合指数中找到仓位
- 防止组合框被关闭
- 如何解决可能的唯一组合问题