#include<iostream> using namespace std; int array[100]={0}; void permutation(char a[],int start,int end) // 找出字符串的全排列(允许输入有重复字符) { int i; char temp; if(start==end) { for( i=0;i<=end;i++) cout<<a[i]<<' '; cout<<endl; } else { for( i=start;i<=end;i++) { for(int j=start;j<i;j++) if(a[j]==a[i]) goto nextI; //消去重复的结果 temp=a[start];a[start]=a[i];a[i]=temp; permutation(a, start+1, end); temp=a[start];a[start]=a[i];a[i]=temp; nextI:; } } } void Comb(int m,int n) // 1~m中取n个数的组合 { for (int i=m;i>=n;i--) { array[n]=i; if (n>1) { Comb(i-1,n-1); } else { for (int j=array[0];j>0;j--) { cout<<array[j]<<" "; } cout<<endl; } } } int main() { char a[]="1211"; permutation(a,0,3); int m,n; cout<<"Input m:"; cin>>m; cout<<"Input n ( n<m ):"; cin>>n; array[0]=n; Comb(m,n); return 0; }