C++ 中的分区函数
Partition function in c++
我需要 c++ 中的算法解决方案来解决分区问题
简单解释:找到得到数字 n 的所有总和。例如
- 输入: 5
- 输出:
- 11111
- 2111 年
- 311
- 41
- 5
- 221
- 23
这个问题似乎很容易,但我找不到解决方案。我接近这个蛮力,因为最高输入是 11。关于这个问题的文章是高度数学化的,我真的不明白。
谢谢大家!
您可以尝试使用函数 F 的递归方法来查找给定数字 X 的所有一级分区,即 X 表示为两个整数 a、b
/*
E.g.
input number:5
5
1 4
1 1 3
1 1 1 2
1 1 1 1 1
1 2 2
2 3
*/
#include <iostream>
#include <vector>
using namespace std;
void print (vector<int>& v, int level){
for(int i=0;i<=level;i++)
cout << v[i] << " ";
cout << endl;
}
void part(int n, vector<int>& v, int level){
int first; /* first is before last */
if(n<1) return ;
v[level]=n;
print(v, level);
first=(level==0) ? 1 : v[level-1];
for(int i=first;i<=n/2;i++){
v[level]=i; /* replace last */
part(n-i, v, level+1);
}
}
int main(){
int N;
cout << "input number:";
cin >> N;
vector<int> v(N);
part(N, v, 0);
}
只需将它们按明确定义的顺序排列即可。然后编写一个函数来查找该顺序中的第一个条目。然后编写一个函数来查找该顺序中的下一个条目。那么问题就微不足道了。
例如,在 5 的情况下,第一个条目有两个选择,即 11111 或 5。这些条目中的任何一个都很容易生成。然后,您只需要一个操作即可从给定条目中获取"下一个条目"。重复该操作,直到失败并完成。
我建议这个顺序:
11111
1112
113
122
14
23
5
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 使用指针在分区函数中实现随机分区点
- 如何在包含自定义对象的容器中使用分区函数C++
- C++ 中的分区函数
- 这两个分区函数之间的区别
- 递归函数的分区,斯特林数,和切比雪夫多项式的第一