#include<iostream>
using namespace std;
int a[100];
void function(int m,int k)
{
int i,j;
for(i=m;i>=k;i--)
{
a[k]=i;
if(k>1)
function(i-1,k-1);
else
{
for(j=a[0];j>0;j--)
cout<<a[j]<<"\t";
cout<<endl;
}
}
}
int main()
{
int n,r;
cout<<"请输入n和r的值:"<<endl;
cin>>n>>r;
if(r>n)
cout<<"输入n和r的值错误!"<<endl;
else
{
a[0]=r;
function(n,r);
}
return 0;
}
/*
@brief 从n个数选取m个数并进行全排列
select(int n,int m) 从n个数中选取m个数
void rank(int m) 对m个数进行全排列
*/
void select(int n,int m);
void rank(int k,int m);
void swap(int x,int y,int data[]);
int value[10]={2,4,5,7,9,12,15,23,46,78};
int data[10]={0}; //选取数存放在这里(位置从1-m,0位置存放选取数的个数m)
int arr[10]={0}; //全排列的数据
int count; //数据总数
int size; //排序个数
int main()
{
count=10;
size=2;
printf("Hello world!\n");
data[0]=size;
select(count,size);
return 0;
}
void select(int n,int m)
{
int i,j;
for(i=n;i>=m;i--)
{
data[m]=value[i-1];
if(m>1)
select(i-1,m-1);
else
{
printf("选取的%d个数如下:\n",data[0]);
for(j=data[0];j>0;j--)
{
printf("%d ",data[j]);
arr[j-1]=data[j];
}
printf("\n");
printf("对选出的%d个数进行全排列表示如下:\n",data[0]);
rank(0,size);
}
}
}
void rank(int k,int n)
{
int i;
int j;
for(i=k;i<n;i++)
{
swap(k,i,arr);
if(i<n-1)
rank(k+1,n);
else
{
for(j=0;j<size;j++)
printf("%d ",arr[j]);
printf("\n");
}
swap(k,i,arr);
}
}
void swap(int x,int y,int data[])
{
int temp=data[x];
data[x]=data[y];
data[y]=temp;
}