问题 3796 --降序组合(完善程序)

3796: 降序组合(完善程序)★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 171  解决: 143
[提交][状态][命题人:]

题目描述

给定两个自然数n,r(20>n>r),输出从数1n中按降序顺序取r个自然数的所有组合。

例如:n=5r=3时,有如下组合:

5 4 3

5 4 2

5 4 1

5 3 2

5 3 1

5 2 1

4 3 2

4 3 1

4 2 1

3 2 1

#include<iostream>
#include<iomanip>
using namespace std;
int  a[30];
int main()
{
    int n,r;
    do
    {
        cin>>n>>r;
    }while(n<=r);
 	int i=1; 
	a[1]=n;
 	do{
	     if(i!= r)
                   if(a[i]>r-i)
		   {
			   ___(1)____;
			   i++;
		   }
                   else
		   {
			   ____(2)______;
			   a[i]--;
		   }
    	       else
		{
                   for(int j=1;j<=r;j++) 
		   cout<<setw(3)<<a[j];
                   cout<<endl;
                   if(a[r]==1)
		   { 
				i--;
		   		a[i]--;
		   }
      		   else
			_____(3)______;     
	 	}
   }while(a[1]>r-1);
 return 0;
} 

输入

两个整数n和r

输出

按降序顺序取r个自然数的所有组合,每个数字占三个位置,每个组合占一行
样例输入
Copy
5 3
样例输出
Copy
  5  4  3
  5  4  2
  5  4  1
  5  3  2
  5  3  1
  5  2  1
  4  3  2
  4  3  1
  4  2  1
  3  2  1

提示

来源

[提交][状态]