排列组合问题是高中数学知识,但是在现实中非常需要;对于计算机编程领域来说更是数不胜数。

一、排列问题

排列(英语:Permutation)是将相异对象或符号根据确定的顺序重排,每个顺序都称作一个排列。

1.1排列数的计数

此节使用排列的传统定义。从 n个相异元素中取出 {\displaystyle k} k个元素, k个元素的排列数量为:

1.2重复排列问题

从n个元素中取出k个元素,k个元素可以重复出现,这排列数量为:

1.3C++实现

#include <iostream>
using namespace std;
bool arrsame(int* arr, int len, int num) {int i;for (i = 0; i < len; i++)if (arr[i] == num)break;return i != len;
}
bool next_perm(int* perm, const int k, const int n) {int i = k - 1;doperm[i]++;while (arrsame(perm, i, perm[i]) || (perm[i] >= n && i--));if (perm[0] >= n)return 0;for (int num = 0, seat = i + 1; seat < k; num++)if (!arrsame(perm, i + 1, num))perm[seat++] = num;return 1;
}
int main() {int n, k;cout << "perm(n,k):" << endl;cin >> n >> k;if (n < k || k <= 0)return 0;int* perm = new int[k];for (int i = 0; i < k; i++)perm[i] = i;dofor (int i = 0; i < k; cout << ((++i < k) ? ',' : '\n'))cout << perm[i] + 1;while (next_perm(perm, k, n));delete[] perm;return 0;
}

二、组合问题

在组合数学,一个集的元素的组合(英语:Combination)是一个子集。S的一个k-组合是S的一个有k个元素的子集。若两个子集的元素完全相同并顺序相异,它仍视为同一个组合,这是组合和排列不同之处。

2.1理论公式计算

从 n个元素中取出 k个元素, k个元素的组合数量为:

2.2取值范围的扩充

2.3C++ 实现

//循环法实现
/***********************/
/** This is C++ code. **/
/**   Comb  Example   **/
/***********************/#include <iostream>
using namespace std;
bool next_comb(int* comb, const int n, const int k) {int i = k - 1;const int e = n - k;docomb[i]++;while (comb[i] > e + i && i--);if (comb[0] > e)return 0;while (++i < k)comb[i] = comb[i - 1] + 1;return 1;
}
int main() {int n, k;cout << "comb(n,k):" << endl;cin >> n >> k;if (n < k || k <= 0)return 0;int* comb = new int[k];for (int i = 0; i < k; i++)comb[i] = i;dofor (int i = 0; i < k; cout << ((++i < k) ? ',' : '\n'))cout << comb[i] + 1;while (next_comb(comb, n, k));delete[] comb;return 0;
}

C++实现排列组合问题相关推荐

  1. java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值

    null export default { data() { return { resultArr:[] } }, mounted(){ this.sss('aaba','abac'); this.s ...

  2. php 1到9加,php通过排列组合实现1到9数字相加都等于20的方法

    摘要:本文实例讲述了php通过排列组合实现1到9数字相加都等于20的方法.分享给大家供大家参考.具体实现方法如下:<?php set_time_limit(0); /* 函数说明:huoqu_z ...

  3. 论排列组合,持续更新

    今天刚好碰到了一个排列组合问题,因为之前对这方面的学习比较少,所以用的非常蠢的方法做了四位数中取三位的排列,写的程序太有局限性,源码如下 #define _CRT_SECURE_NO_WORNINGS ...

  4. 无重复字符串的排列组合

    无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1: 输入:S = "qwe" 输出:["qwe", " ...

  5. 【牛客每日一题】4.16 逆序对 ( 数学 , 排列组合 ,快速幂 , 快速乘 )

    [每日一题]逆序对 链接:https://ac.nowcoder.com/acm/problem/14731 来源:牛客网 题目描述 求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j ...

  6. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  7. 【数论】排列组合学习笔记

    目录 简介 加原理和乘法原理 加法原理 乘法原理 两原理的区别 例子 排列 例子 简介 排列组合是组合数学中的一种.排列就是指从给定个数的元素中取出指定个数的元素进行排序:组合则是指从给定个数的元素中 ...

  8. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  9. 蓝桥杯——说好的进阶之去反复元素的排列组合

    将待排列(组合)的数组,先分别统计出种类和个数,然后进行避免反复的排列(组合). /* 1,1,2,3的排列组合 去反复* (借此复习排列组合)* * 1:2 2个1* 2:1 1个2* 3:1 1个 ...

  10. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合

    [题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...

最新文章

  1. 基于 react, redux 最佳实践构建的 2048
  2. SAP RETAIL 商品主数据POS视图
  3. 含有负边的图的最短路径(Bellman_ford算法)
  4. 【MaxCompute】学习笔记基础说明
  5. UVA 307 Sticks
  6. 【机器学习基础】数学推导+纯Python实现机器学习算法24:LightGBM
  7. Ollydbg使用教程学习总结(四)
  8. 对象映射工具AutoMapper介绍
  9. CAN笔记(18) 对象字典
  10. android全局livedata,Android 使用ViewModel,LiveData高效、简
  11. MySQL优化详解(三)——MySQL慢查询与内参数优化
  12. 思维导图的绘制要点及使用GitMind工具快速制作思维导图
  13. 防火墙---翻译地址(NAT)
  14. kettle 6.1.0.1 mysql_kettle连接数据库报错:Error occured while trying to connect
  15. 2022-02-11 学习记录:通过CSS3的clip-path实现多边形
  16. SSL中等强度密码套件(SWEET32);SSL 64位块大小密码套件支持(SWEET32)
  17. 中兴事件敲警钟 马化腾要用微信撬动芯片行业
  18. cartographer建图,重定位及发布消息结构为nav_msgs::Odometry的odom话题
  19. 语言识别器需要重点学习哪些?
  20. python脚本编译流程

热门文章

  1. 干货分享:常见的十种破解密码方法!赶紧收藏!
  2. 制作目标在背景中具有移动效果的视频
  3. 教你用迅雷下载百度网盘的文件
  4. iphone手机html视频播放,iphone5视频格式 传到苹果手机上的视频怎么才能看
  5. Ubuntu如何更新显卡驱动
  6. windows保护无法启动修复服务器,解决使用sfc命令提示“windows 资源保护无法启动修复服务”的方法...
  7. 小甲鱼python线下培训
  8. IT公民:293个公司人压力和心理调查
  9. librosa 音频处理库
  10. 俄亥俄州立大学计算机科学转学成功,国内普二本学生成功转学美国俄亥俄州立大学...