代码实现:
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
unsigned long sum(vector<unsigned long>& vec,unsigned long k)
{
unsigned long sum = 0;
for (unsigned long i = 1; i <= k; ++i)
{
sum += vec[i];
}
return sum;
}
void check_end(vector<unsigned long>& vec,unsigned long i,unsigned long n)
{
if (i > 1)
{
if (vec[i] > n)
{
vec[i-1]++;
check_end(vec,i-1,n);
vec[i] = vec[i-1];
}
}
}
void print_num(vector<unsigned long>& vec)
{
vector<unsigned long>::size_type i;
for (i = 1; i < vec.size(); ++i)
{
cout << vec[i] << " ";
}
cout << endl;
}
int main(int argv,char* argc[])
{
unsigned long n,k;
cout << "input n " << endl;
cin >> n ;
for(k=1;k<n;k++)
{
unsigned long m = (n/k) +1;
while (k > n)
{
cout << "input error,please input again:" << endl;
cin >> n >> k;
}
unsigned long num = 0;
vector<unsigned long> vec;
for (unsigned long i = 0; i <= k; i++)
{
vec.push_back(1);
}
if (n == sum(vec,k))
{
num++;
print_num(vec);
}
while (vec[1] <= m)
{
vec[k]++;
check_end(vec,k,n);
if (n == sum(vec,k))
{
num++;
print_num(vec);
}
}
cout << "the number is: " << num << endl;
}
}