NYOJ上的题目:组合数
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
他给的答案没有一点注释,我根本看不懂啊!!!
程序代码:
#include<algorithm> #include<iterator> #include<iostream> using namespace std; int selected[10]; int data[]={10,9,8,7,6,5,4,3,2,1}; void myfind(int start,int step,int M,int N) { if(step==N) { copy(selected,selected+N,ostream_iterator<int>(cout,"")); cout<<endl; return; } for(int i=start;i<=M;i++) { selected[step]=data[9-M+i]; myfind(i+1,step+1,M,N); } } int main() { int m,n; cin>>m>>n; myfind(1,0,m,n); }