27.Algorithm Gossip: 排列组合

说明

将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:

1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。

解法

可以使用递回将问题切割为较小的单元进行排列组合,例如1 2 3 4的排列可以分为

1 [2 3 4]、2 [1 3 4]、3 [1 2 4]、4 [1 2 3]

进行排列,这边利用旋转法,先将旋转间隔设为0,将最右边的数字旋转至最左边,并逐步增加旋转的间隔,例如:

1 2 3 4 -> 旋转1 -> 继续将右边2 3 4进行递回处理
2 1 3 4 -> 旋转1 2 变为 2 1-> 继续将右边1 3 4进行递回处理
3 1 2 4 -> 旋转1 2 3变为 3 1 2 -> 继续将右边1 2 4进行递回处理
4 1 2 3 -> 旋转1 2 3 4变为4 1 2 3 -> 继续将右边1 2 3进行递回处理

代码示例

#include <stdio.h>
#include <stdlib.h>
#define N 4void perm(int*, int); int main(void) {int num[N+1], i;for(i = 1; i <= N; i++) num[i] = i;perm(num, 1);return 0;}void perm(int* num, int i) { int j, k, tmp;if(i < N) {for(j = i; j <= N; j++) { tmp = num[j];// 旋转该区段最右边数字至最左边for(k = j; k > i; k--)num[k] = num[k-1]; num[i] = tmp; perm(num, i+1);// 还原for(k = i; k < j; k++) num[k] = num[k+1];num[j] = tmp;}}else {  // 显示此次排列for(j = 1; j <= N; j++) printf("%d ", num[j]);printf("\n");}}

C++经典算法题-排列组合相关推荐

  1. 算法题-排列组合问题

    27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3.1 3 2.2 1 3.2 3 1.3 ...

  2. python全排序算法题_Python的100道经典算法题(1)

    按照c语言的100道经典算法题,自己原创写的,就得是自己的练习题了 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数 ...

  3. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法

    原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,"商品推荐","猜你喜欢&quo ...

  4. 经典算法题每日演练——第二十二题 奇偶排序

    原文:经典算法题每日演练--第二十二题 奇偶排序 这个专题因为各种原因好久没有继续下去了,MM吧...你懂的,嘿嘿,不过还得继续写下去,好长时间不写,有些东西有点生疏了, 这篇就从简单一点的一个&qu ...

  5. 经典算法题每日演练——第十九题 双端队列

    经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...

  6. 经典算法题每日演练——第十题 树状数组

    原文:经典算法题每日演练--第十题 树状数组 有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太牛逼的,它就是树状数组,这种数据结构不是神人是发现不了的. 一:概序 假如我现在有个 ...

  7. 经典算法题每日演练——第一题 百钱买百鸡

    经典算法题每日演练--第一题 百钱买百鸡 原文:经典算法题每日演练--第一题 百钱买百鸡 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, ...

  8. java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...

  9. 经典算法题每日演练——第七题 KMP算法

    原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...

最新文章

  1. ScrollView中嵌套ListView
  2. maven上传本地仓库
  3. Winform中使用DevExpress时给控件添加子控件的方法
  4. explain查看mysql语句的执行效率
  5. oracle ebs hr模块表,oracle ebs常用表结构及分类模块.doc
  6. LintCode 600. 包裹黑色像素点的最小矩形(BFS)
  7. php oop基础,php面向对象编程(oop)基础
  8. 优麒麟(Ubuntu Kylin)安装日志
  9. 环境搭建-CentOS集群搭建
  10. 佐客牛排机器人餐厅_开业爆红的机器人餐厅,背后有这些王炸……
  11. 使用PG处理地图数据偏移问题
  12. VS2019连接SQL2008实现登录注册功能.
  13. Jmeter 接口测试post请求数据失败
  14. 递归算法计算二叉树中叶子结点数目 c语言,编写递归算法,计算二叉树中叶子结点的数目。...
  15. “风味人间”与计算机程序设计艺术《禅与计算机程序设计艺术》
  16. 医生一句话,6岁女娃的视力从0.15回到1.0!
  17. VSCode 浏览器打开插件
  18. 软件工程研究领域最顶级的两个期刊
  19. 基于Tempo大数据分析平台的智慧博物馆大数据中心
  20. 使用命令能够查看本地计算机,网络故障常用诊断命令及使用方法

热门文章

  1. input正则邮箱_常用正则表达式—邮箱(Email)
  2. 发生错误,无法导入项目(不能取回此项的内容)
  3. cesium颜色值赋值
  4. 基于ACCESS的教师工作量计算系统的设计与实现(含源文件)
  5. 深度学习 卷积神经网络-Pytorch手写数字识别
  6. linux 删除所有a字符串,linux文本处理三剑客(grep、sed、akw)命令选项整理
  7. Lottie Android 动画制作与使用
  8. itext 在已知页码的情况下,往pdf中添加图片,实测有效,下面贴出代码
  9. SSH综合项目实战(快递) -- day07 定区关联快递员、搭建前台、客户注册
  10. Python爬虫系列(七)豆瓣图书排行榜(数据存入到数据库)