对n个数进行全排列并打印全排列结果
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为
简单分析:
1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。
由于一个数的全排列就是其本身,从而得到以上结果。
2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。
即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开头的和3,4的全排列的组合.
从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。
因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。当n = 1时perm(p} = r1。
为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。
#include <stdio.h>
int n=0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d", list[i]);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
//int list[] = {1, 2, 3, 4, 5};
//perm(list, 0, 4);
int n;
int a[20];
while(~scanf("%d",&n))
{
for(int i=0;i<n;++i)
a[i]=i+1;
perm(a, 0, n-1);
printf("total:%d\n", n);
}
return 0;
}
对n个数进行全排列并打印全排列结果相关推荐
- python打印字符串全排列_Python实现全排列的打印
本文为大家分享了Python实现全排列的打印的代码,供大家参考,具体如下 问题:输入一个数字:3,打印它的全排列组合:123 132 213 231 312 321,并进行统计个数. 下面是Pytho ...
- NC15128 老子的全排列呢 dfs 全排列 (何以解忧,唯有暴搜)
链接:https://ac.nowcoder.com/acm/problem/15128 来源:牛客网 题目描述 老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点 ...
- n个数取m个进行全排列算法(python)
之前使用c++ 写了一个全排列, 今天写了python版本,实现对实际应用题的解析 # 比如有N个数,选出M个排列,并且满足一定条件,则有多少种可能,或者极限值是多少? # 比如1~8的数字,排列为一 ...
- python全排列速度最快_python 写的两种打印全排列的方法速度对比
方法一: max = 6 index = [0]*max from time import clock start=clock() while True: candi = range(0,max) f ...
- 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )
文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni≥r ) 四.多重集非全排列 2 某些元素重复度小 ...
- 圆排列(去除全排列重复、全排列镜像)
以下代码思路一样,第一个处理手段比较容易想到,只在最后一位比较与第一位的大小:第二个空间换时间,第三个在递归过程中进行处理筛选.算法解法容易想到,难点在于处理全排列镜像方面,当然做出来也不难,难的是如 ...
- java实现全排列_Java实现全排列
①假设全排列函数为f(n)=n!,那么可以立刻知道f(n+1)=(n+1)Xn!=(n+1)*f(n),因此可以利用递归方便地实现.在递归前所要做的事情就是把该步递归中的第一个元素与后面几个元素进行交 ...
- 全排列【46. 全排列】
一,题目描述 力扣 46. 全排列 难度中等1767 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 示例 1: 输入:nums = [1,2,3] ...
- 回溯算法--LeetCode-46 全排列、LeetCode-47 全排列Ⅱ
LeetCode-46 全排列 题目链接:https://leetcode-cn.com/problems/permutations/ 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输 ...
最新文章
- 一代不如一代?别轻易给年轻人贴标签
- java string fill_Java使用fill()数组填充的实现
- mysql 主从同步-读写分离
- 300. 最长上升子序列
- php数值操作,php数值计算num类简单操作示例
- python multithreading_操作系统OS,Python - 多进程(multiprocessing)、多线程(multithreading)...
- 在linux中怎么装python3环境,在Linux环境下安装Python3
- Python风格总结:循环语句
- linux nona怎么用_Linux nano编辑器命令常用方法
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- 论文笔记_S2D.13-2017-3DV-稀疏不变的卷积神经网络(Sparsity Invariant CNNs)
- Flutter跨组件共享状态的利器Provider原理解析
- 微信小程序选项卡原理
- docx文档怎么排列图片_腾讯、石墨、金山在线文档简单对比
- 为什么打开服务器word文档是只读,以只读方式打开Word文档的方法
- 页面提示“百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥,或此密钥未对本应用的百度地图JavaScriptAPI授权。您可以访问如下网址了解如何获取有效的密钥:ht”
- 原生js以及jQuery删除节点
- 软题库 - 软考题库,云题库,智能测试
- 用搜狗输入法原样输出10的若干次方
- 关于p操作和v操作的理解