大家帮我看道题,类似于全排列!急!!!!

来源:百度知道 编辑:UC知道 时间:2024/09/20 11:55:45
排列(permutation)

【源程序名】permutation.(pas/cpp)

【问题描述】有n个人(1≤n≤9),每个人的编号1,2,...,n;请选出r个人参加一个活动,并排成一队,请输出所有可能。结果按照字典排序。

【输入数据】输入数据两行,第一行包含一个整数n(1≤n≤9),表示共有n个人,第二行包含一个整数r(1≤r≤n),表示共有r个人参加活动。

【输出数据】输出数据每一种排列占一行,为这r个人的编号,编号之间有一个空格,排列按照字典顺序输出。

【测试样例】

输入

3

3

输出

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1
用free pascal 语言做!

#include<stdio.h>
int a[10],n,r;

void process(int remain)
{
int i,j,ok;
if(remain==0)
{
for(i=0;i<r-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
else
{
for(i=1;i<=n;i++)
{
ok=1;
for(j=0;j<r-remain;j++) if(i==a[j]) ok=0;
if(ok)
{
a[r-remain]=i;
process(remain-1);
}
}
}
return;
}

int main()
{
scanf("%d%d",&n,&r);
process(r);
return 0;
}