#include<iostream.h> void fun(int m)//m的m次方,允许重复的全排列 { int *a=new int[m+1]; for(int i=0;i<=m;i++) a[i]=0; while(a[m]!=1) { for(int i=0;i<m;i++) cout<<a[i]<<" "; cout<<endl; for(int j=0;j<=m;j++) { a[j]+=1; if(a[j]>=m) a[j]=0; else break; } } delete []a; } int fun1(int N,int M)//组合 从N个数中取M个 { int *a=new int[M];//生成数组 int i,j,num=0; for(i=0;i<M;i++) a[i]=i+1; while(a[0]<=N-M) { for(i=0;i<M;i++) cout<<a[i]<<" "; cout<<endl; num++; int flag=false; for(j=M-1,i=0;j>=0;j--,i++) { a[j]+=1; if(a[j]<=N-i) { if(flag) { for(int k=j+1;k<M;k++) a[k]=a[k-1]+1; } break; } flag=true; } } for(i=0;i<M;i++) cout<<N-M+i+1<<" "; cout<<endl; num++; delete []a; return num; } int main() { cout<<fun1(7,7)<<endl; return 0; }