用c++实现从n个数中选出m个数并对这m个数进行全排列

如题。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
void main(){
int m,n,a[100],i;
cout<<"输入n和m:"<<endl;
cin>>n>>m;
for(i=0;i<n;i++){
cin>>a[i];
}
do{
copy(a,a+m,ostream_iterator<int>(cout,"\t"));
cout<<endl;
}while(next_permutation(a,a+n));
}
我用的stl库函数,这个应该是最简单的!!!虽然网上有很多递归的方法!!!其次,如果要运行,至少得vc6.0的企业版!!!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-16
#include &lt;iostream.h&gt;int combine(int a[], int n, int m){    m = m &gt; n ? n : m; int* order = new int[m+1];     for(int i=0; i&lt;=m; i++)  order[i] = i-1;              int count = 0;                                 int k = m; bool flag = true;            while(order[0] == -1) {  if(flag)                    {      for(i=1; i&lt;=m; i++)                        cout &lt;&lt; a[order[i]] &lt;&lt; &quot; &quot;;   cout &lt;&lt; endl;   count++;   flag = false;  }  order[k]++;                if(order[k] == n)            {   order[k--] = 0;   continue;  }         if(k &lt; m)                    {   order[++k] = order[k-1];   continue;  }    if(k == m)   flag = true; } delete[] order; return count;}int main(){ const int M = 4; const int N = 3; int a[M]; int b[N]; for(int i=0;i&lt;M;i++)  a[i] = i+1; combine(aM,N);  return 0;}
相似回答