C/C++ code#include
#include
using namespace std;
int main()
{
int *a,m=-1,n=-1,rest,cur=0;
register int i;
do
{
cout<
cin>>m;
}while(m<0);
do
{
cout<
cin>>n;
}while(n<=0);
cout<
if(n>1)
{
rest=m;
a=new int[--n];
for(i=0;i
a[i]=0;
while(a[0]<=m)
{
if(cur==n)
{
cout<
for(i=0;i
cout<
cout<
rest+=a[--cur]++;
}
else
if(a[cur]<=rest)
rest-=a[cur++];
else
{
a[cur--]=0;
rest+=a[cur]++;
}
}
delete a;
}
else
cout<
system("pause");
return(0);
}
------解决方案--------------------C/C++ code#include
#include
//----------------------------------
// n个非负整数,和为m的全排列
//----------------------------------
using namespace std;
int main()
{
int *a,m=-1,n=-1,rest,cur=0;
register int i;
do
{
cout<
cin>>m;
rewind(stdin);
}while(m<0);
do
{
cout<
cin>>n;
rewind(stdin);
}while(n<=0);
cout<
if(n>1)
{
rest=m;
a=new int[--n];
for(i=0;i
a[i]=0;
while(a[0]<=m)
{
if(cur==n)
{
cout<
for(i=0;i
cout<