一、集合的全排列
#include <iostream>
#include <vector>
using namespace std;
void Prem(vector<int> vec,int beg,int ends);
int main(){
vector<int> vec;
int n;
cin>>n;
while(n!=0){
vec.push_back(n);
cin>>n;
}
cout<<"开始"<<vec.size()<<endl;
Prem(vec,0,vec.size()-1);
system("pause");
return 0;
}
void Prem(vector<int> vec,int beg,int ends)
{
if(beg==ends)
{
for (int j = 0; j < vec.size(); j++)
{
cout<<vec[j]<<" ";
}
cout<<endl;
}
else{
for(int i=beg;i<=ends;i++)
{
swap(vec[i],vec[beg]);
Prem(vec,beg+1,ends);
swap(vec[i],vec[beg]);
}
}
}
二、整数的划分
#include <iostream>
using namespace std;
int split(int n,int m);
int main()
{
int n,m;
cin>>n>>m;
int x=split(n,m);
cout<<x;
system("pause");
return 0;
}
int split(int n,int m)
{
if(n==1||m==1)return 1;
else if(n<m) return split(n,n);
else if(n==m) return split(n,n-1)+1;
else if(n>m) return split(n,m-1)+split(n-m,m);
}
三、集合的划分
#include <iostream>
using namespace std;
int sum=0;
long group(int n,int k);
int main()
{
int n,k;
cin>>n>>k;
long x=group(n,k);
cout<<"共分"<<x<<"组"<<endl;
system("pause");
return 0;
}
long group(int n,int k)
{
if(k==1)return 1;
if(n<k||k==0)return 0;
return group(n-1,k-1)+group(n-1,k)*k;
}
本文详细介绍了三种核心算法:集合的全排列、整数的划分以及集合的划分。通过具体的代码实现,展示了如何使用C++进行这些数学运算,为理解和解决组合数学问题提供了实用的编程技巧。
609

被折叠的 条评论
为什么被折叠?



