无聊写了个1到M中输出N个数的所有组合,给优化优化吧,思想最好别给变
程序代码:
#include "stdio.h" #include "iostream" using namespace std; extern void fulledition2 (int m,int n); int factorial (int m) { int i; int s=1; for(i=1;i<=m;i++) { s=s*i; } return s; } int main () { int i,n,m; cout<<"输入M"<<endl; cin>>m; cout<<"输入N"<<endl; cin>>n; i=factorial(m)/(factorial(n)*factorial(m-n)); cout<<"M中取N的组合数="<<i<<endl; cout<<"所有组合情况:"<<endl; fulledition2(m,n); return 0; }#include "stdio.h" #include "iostream" using namespace std; void fulledition2 (int m,int n) { int t[1000]; int i,a,sum,b; t[0]=0; for (i=1;i<=n;i++) { t[i]=1; } for (i=n+1;i<=m;i++) { t[i]=0; } //初始化t[i]的值 for(i=0;i<=m;i++) { if (t[i]==1) cout<<i<<" "; } cout<<endl; for(i=1;i<=m;i++) { if(t[i]==1&&t[i+1]==0) { sum=0; for(a=0;a<i;a++) sum=sum+t[a]; t[i+1]=1; t[i]=0; for(b=1;b<=sum;b++) t[b]=1; for(b=sum+1;b<=i;b++) t[b]=0; for(i=0;i<=m;i++) { if (t[i]==1) cout<<i<<" "; } cout<<endl; i=0; } } //输出函数 }