n个数中取出r个数组合,逆序输出
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。 输入 输入n、r。 输出 按特定顺序输出所有组合。 特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。 样例输入 5 3 样例输出 543 542 541 532 531 521 432 431 421 321
#include<iostream>
using namespace std;
class ARR{
public:
int data[10];
int a;
int b;
int pointer;
ARR(int n, int r){
pointer = 0;
a = n ;
b = r;
}
void set(int n, int r){
pointer =0;
a = n;
b = r;
}
void push(int key){
data[pointer]= key;
pointer++;
}
void print(){
for(int i = 0 ;i <pointer;++i){
cout<<data[i];
}
cout<<endl;
}
void pop(){
pointer--;
}
void comp(int n , int r);
};
void ARR::comp(int n,int r){
if(b == pointer){
print();
return;
}
for(int i = n; i >= r ; i--){
push(i);
comp(i-1,r-1);
pop();
}
}
int main()
{
int n, r;
ARR arr(5,3);
while(cin>>n>>r){
arr.set(n, r);
arr.comp(n,r);
}
}