#include<iostream>
#include<stdio.h>
using namespace std;
int arrange[10000000];
int combination[1000000];
int store[10000000];
int n;
int m;
int countcombination;
int countarrange;
void docombination(int u,int v)//组合
{
if(v==m+1)
{
for(int i=1;i<=m;i++)
cout<<store[i]<<" ";
cout<<endl;
countcombination++;
}
else
{
for(int i=u;i<=n-m+v;i++)
{
store[v]=combination[i];
docombination(i+1,v+1);
}
}
}
void out()
{
for(int i=1;i<=n;i++)
{
printf("%d ",arrange[i]);
}
cout<<endl;
}
void doarrange(int u)//排列
{
if(u==n)
{
out();
countarrange++;
return;
}
for(int i=u;i<=n;i++)
{
int temp;
temp=arrange[i];
arrange[i]=arrange[u];
arrange[u]=temp;
doarrange(u+1);
temp=arrange[i];//回溯
arrange[i]=arrange[u];
arrange[u]=temp;
}
}
int main()
{
while(cin>>n>>m)
{
countcombination=0;
countarrange=0;
for(int i=1;i<=n;i++)
{
arrange[i]=i;
combination[i]=i;
}
cout<<"从n个数字中选出m个的组合为"<<endl;
docombination(1,1);
cout<<"n个数的排列为"<<endl;
doarrange(1);
cout<<"组合数"<<countcombination<<endl;
cout<<"排列数"<<countarrange<<endl;
}
}
#include<stdio.h>
using namespace std;
int arrange[10000000];
int combination[1000000];
int store[10000000];
int n;
int m;
int countcombination;
int countarrange;
void docombination(int u,int v)//组合
{
if(v==m+1)
{
for(int i=1;i<=m;i++)
cout<<store[i]<<" ";
cout<<endl;
countcombination++;
}
else
{
for(int i=u;i<=n-m+v;i++)
{
store[v]=combination[i];
docombination(i+1,v+1);
}
}
}
void out()
{
for(int i=1;i<=n;i++)
{
printf("%d ",arrange[i]);
}
cout<<endl;
}
void doarrange(int u)//排列
{
if(u==n)
{
out();
countarrange++;
return;
}
for(int i=u;i<=n;i++)
{
int temp;
temp=arrange[i];
arrange[i]=arrange[u];
arrange[u]=temp;
doarrange(u+1);
temp=arrange[i];//回溯
arrange[i]=arrange[u];
arrange[u]=temp;
}
}
int main()
{
while(cin>>n>>m)
{
countcombination=0;
countarrange=0;
for(int i=1;i<=n;i++)
{
arrange[i]=i;
combination[i]=i;
}
cout<<"从n个数字中选出m个的组合为"<<endl;
docombination(1,1);
cout<<"n个数的排列为"<<endl;
doarrange(1);
cout<<"组合数"<<countcombination<<endl;
cout<<"排列数"<<countarrange<<endl;
}
}