在n個數選取m個數中進行全排列
阿新 • • 發佈:2019-02-19
#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個數進行全排列
*/
#include <stdio.h>
#include <stdlib.h>
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;
}