[C语言入门题]1~n全排列
来源:互联网 发布:python 绘制分布图 编辑:程序博客网 时间:2024/06/01 07:53
题目描述
大家高中都学过全排列。例如,1,2,3三个数进行全排列,其结果为(1,2,3)(1,3,2)(2,1,3)(2,3,1)(3,1,2)(3,2,1)。现在,给你数字n,请你列出数1,2,3...,n的全排列。输出顺序应该按照字典序输出。即对于两个排列,先比较第一位,第一位小的排前面,如果相等,再比较第二位,以此类推。例:(1,2,3)排在(1,3,2)前面。
输入
每一行输入一个数n。n<=5.
输出
每行输出对应的全排列情况。
样例输入
23
样例输出
(1, 2)(2, 1)(1, 2, 3)(1, 3, 2)(2, 1, 3)(2, 3, 1)(3, 1, 2)(3, 2, 1)
提示
学着使用递归。
可以考虑将排序结果存储在数组A中。
首先,为了确定A中的数,你可以先确定A[0]。
A[0]可以有1~n种可能。
当A[0]取某一个值之后,接下来确定A[1]到A[n-1]的值(注意递归思想在这里体现)。
而为了确定A[1]的值,你需要回头去看一下A[0],如果某个数被A[0]用了,则A[1]不能再使用,而其他数都可以被A[1]使用。
一般地,当你确定A[k]时,你需要看看哪些数没有被A[0], A[1], ..., A[k-1]用过。没用过的数,都可以在A[k]中使用。
#include<stdio.h>
int Set[15];
int Arr[15];
int n;
void Arrange(int cur)
{
if (cur == n + 1)
{
printf("(");
for (int i = 1; i < cur; i++)
{
printf("%d", Arr[i]);
if (i != cur - 1)
printf(", ");
}
printf(")");
return;
}
for (int i = 1; i <= n; i++)
{
int ok = 1;
for (int j = 1; j<cur; j++)
if (Arr[j] == Set[i])
ok = 0;
if (ok)
{
Arr[cur] = Set[i];
Arrange(cur + 1);
}
}
}
int main()
{
while (scanf("%d", &n) != EOF)//元素个数
{
int i;
for (int i = 1; i <= n; i++)//元素
Set[i] = i;
Arrange(1);
printf("\n");
for (i = 1; i <= n; i++)
{
Set[i] = 0;
Arr[i] = 0;
}
getchar();
getchar();
}
return 0;
}
int Set[15];
int Arr[15];
int n;
void Arrange(int cur)
{
if (cur == n + 1)
{
printf("(");
for (int i = 1; i < cur; i++)
{
printf("%d", Arr[i]);
if (i != cur - 1)
printf(", ");
}
printf(")");
return;
}
for (int i = 1; i <= n; i++)
{
int ok = 1;
for (int j = 1; j<cur; j++)
if (Arr[j] == Set[i])
ok = 0;
if (ok)
{
Arr[cur] = Set[i];
Arrange(cur + 1);
}
}
}
int main()
{
while (scanf("%d", &n) != EOF)//元素个数
{
int i;
for (int i = 1; i <= n; i++)//元素
Set[i] = i;
Arrange(1);
printf("\n");
for (i = 1; i <= n; i++)
{
Set[i] = 0;
Arr[i] = 0;
}
getchar();
getchar();
}
return 0;
}
阅读全文
0 0
- [C语言入门题]1~n全排列
- C语言n个数全排列算法
- 【C】1~n 的全排列
- C语言全排列
- C语言 全排列
- 1-N全排列
- 求1到n的全排列(搜索入门)
- 全排列C语言实现
- C语言实现全排列
- C语言实现全排列
- C语言实现全排列
- C程序:打印1,2,3,..,n的全排列
- 打印1~N的全排列(C++)
- 1-n的全排列
- python 全排列 1~n
- n个数的全排列C语言递归 (回溯)back-tracking
- 数组全排列c语言实现
- c 语言实现全排列和组合
- 【Java】3.DelayQueue使用与分析
- 模板方法模式深度解析(三)
- zabbix执行远程命令
- 用一行python代码做一个简单的web服务器
- 461. Hamming Distance
- [C语言入门题]1~n全排列
- log
- 池化函数-max_pool_with_argmax
- 多线程还是多进程的选择及区别
- 【C++】指针与函数
- django项目目录介绍
- 移动端踩坑记---------ios下输入法遮挡input
- 利用python爬取豆瓣音乐TOP250
- 操作复杂对象结构——访问者模式(一)