大家帮我看道题,类似于全排列!急!!!!
来源:百度知道 编辑: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 语言做!
【源程序名】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;
}