您的位置:首页 > 其它

组合以及可以重复的排列

2012-09-29 23:41 190 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐