#include <stdio.h>
#include <stdlib.h>int array[] = {1,2,3,4};#define N  4
#define M  3
int results[N] = {0}; //保存已经找到的结果前缀数组
int results_end = 0; //结果前缀数组有效数据下标
int is_used[N] = {0}; //是否已经排列过了的标志/*** 排列* @param deep 递归深度* @param n 数组最大长度*/
void perm(int deep, int n)
{int i;if (deep > n) // 越界递归结束{return;}if (deep == n) // 找到结果,打印,递归结束{for (i = 0; i < n; i++){printf("%d", results[i]);}printf("\t");return ;}for (i = 0; i < n; i++){if (is_used[i] == 0){is_used[i] = 1;results[deep] = array[i];perm(deep+1, n);is_used[i] = 0;}}
}/*** 组合* @param deep 递归深度* @param n 数组最大长度* @param m 要查找的组合的长度*/
void comb(int deep, int n, int m)
{int i = 0;if (deep > n) // 越界递归结束return ;if (results_end == m) // 找到结果,打印,递归结束{for (i = 0; i < m; i++){printf("%d", results[i]);}printf("\t");return ;}results[results_end++] = array[deep];comb(deep+1, n, m); //向下一级递归results_end--;comb(deep+1, n, m); //向下一级递归
}int main()
{int i = 0;printf("全排列:\n");perm(0, N);printf("\n1~%d的所有组合:\n", N);for(i=1; i<=N; i++){comb(0, N, i);}printf("\n");return 0;
}

运行结果
[root@centos6 data]# gcc test.c
[root@centos6 data]# ./a.out
全排列:
1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321
1~4的所有组合:
1 2 3 4 12 13 14 23 24 34 123 124 134 234 1234


始于2010-12-30,Tencent;更新至2016-06-02,杭州。

排列组合 C语言实现相关推荐

  1. 用c语言实现字母排列组合,C语言字母排列组合的实现.pdf

    C语言字母排列组合的实现 曹玉坤 2011-6-21 目录 概述3 需求3 规律3 实现算法5 难点6 代码6 概述 本文档概述字母排列组合的实现算法和分析过程,着重强调在 解决问题前,对问题的思考方 ...

  2. 用c语言实现字母排列组合,C语言字母排列组合的实现.doc

    C语言字母排列组合的实现.doc C语言字母排列组合的实现曹玉坤2011-6-21目录概述3需求3规律3实现算法5难点6代码6概述 本文档概述字母排列组合的实现算法和分析过程,着重强调在解决问题前,对 ...

  3. 三个字母排列组合c语言,n个球的排列组合算法

    /*算法说明: 问题:现在有n个球,分别编号为1,2,3···n,对这n个球有多少种不重复的排列,列出所有的排列. 解:由数学知识可知:第一个球有n种选择,第二个球有n-1个选择··所以共有n!种选择 ...

  4. c语言回溯法,回溯法 实现 排列组合(C 语言版本)

    * 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先 * 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中 * 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其 ...

  5. 4个字母的排列组合c语言,1,2,3,4四个数字有多少种排列组合,是怎样的

    概述:本道作业题是明倮粤同学的课后练习,分享的知识点是怎么样才叫努力学习,指导老师为糜老师,涉及到的知识点涵盖:怎样努力才算努力? 作文-怎么样才叫努力学习,下面是明倮粤作业题的详细. 题目:怎样努力 ...

  6. C语言打印字符串的所有排列组合(附完整源码)

    C语言打印字符串的所有排列组合 字符串的所有排列问题 C语言打印字符串的所有排列组合的完整源码(定义,实现,main函数测试) 字符串的所有排列问题 示例:ABC的排列是ABC,ACB,BCA,BAC ...

  7. 合理抽象灵活运用排列组合(洛谷P2181题题解,Java语言描述)

    题目要求 P2181题目链接 分析 其实,本题是一个数学题... 首先由题意得,不会有三条对角线交于一点,所以过某一个交点有且只能有2条对角线. 而这两条对角线实质上是确定了4个顶点(也可以看做是一个 ...

  8. Cmn递推函数c语言,Cmn排列组合 高三数学知识点总结归纳5篇精选

    高三学生很快就会面临继续学业或事业的选择.面对重要的人生选择,是否考虑清楚了?这对于没有社会经验的学生来说,无疑是个困难的想选择.如何度过这重要又紧张的一年,我们可以从提高学习效率来着手!下面就是小编 ...

  9. c语言杨辉三角求排列组合,杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析...

    说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三 ...

最新文章

  1. mysql简易oa系统_基于mybatis设计简单OA系统问题2
  2. 【ZZ】编程能力层次模型
  3. 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料???
  4. Cisco交换机端口聚合、VTP、ACL配置实例
  5. SmartSql For Asp.Net Core 最佳实践
  6. OData 1-2 windows 身份验证和OData
  7. 判断本地和云端通讯录是否一致
  8. SAP License:什么是ERP、SAP?
  9. mysql删除重复记录语句的方法
  10. Docker系列(四)守护式容器
  11. linux shell 高级编程,shell高级编程(带365个实例源码)
  12. oracle 分析函数之分组求和、连续求和
  13. 6. lcd驱动1-硬件原理
  14. 8-17 UILabel 自定义字体
  15. tkinter制作选择文件夹对话框
  16. [python案例]金融知识图谱构建流程
  17. python3网络爬虫(2.1):爬取堆糖美女
  18. 尼基塔·丹尼诺夫《梦想者》
  19. 拳皇97c语言编码,拳皇97(格斗王97)
  20. 教你如何做个妖精(女人必读)

热门文章

  1. CentOS一键安装LAMP
  2. python数据可视化之美pdf_Python数据可视化之美:专业图表绘制指南
  3. 犀思云喜获“2021年度SASE优秀案例”奖
  4. python怎么控制键盘和鼠标_利用python怎么控制键盘与鼠标
  5. 柠檬水找零(C++)
  6. 做网赚的人至少一半人都在抖音搞钱!
  7. Linux系统C编程资料
  8. 天妒英才,雷霄骅走了。
  9. Exceptional Server
  10. 2022年盲盒行业现状