问题描述:

假设有数组里面存放26个字母,取出n个,以m个排列,计算排列的总数!

注意:

(1) m<n

(2) 里面的元素不能重复排列

(3)"遇零则止"

核心代码如下:

#include <stdio.h>
#include <malloc.h> #include "../include/permutation.h"
#include "../include/mec.h" static void permutate(char *result, boolean *beUsed, int i,
int n, int m, char *alpha); static void permutate(char *result, boolean *beUsed, int i,
int n, int m, char *alpha) {
int index; if (i >= m) { //递归的结束条件
result[i] = 0;
printf("%s\n", result); return;
}
for (index = 0; index < n; index++) {
if (beUsed[index] == FALSE) {
beUsed[index] = TRUE; //使使用的那个位子赋值为TRUE表示用过了
result[i] = alpha[index];   //放该元素
permutate(result, beUsed, i+1, n, m, alpha);
beUsed[index] = FALSE;
}
}
} void permutatation(char *alpha, int n, int m) {
char *result;
boolean *beUsed; result = (char *) calloc(sizeof(char), m + 1);
beUsed = (boolean *) calloc(sizeof(boolean), n);   // alpha ABCDEFG n个字符   // beUsed 0000000(若是用过了赋值为1)   //下标 1234567 permutate(result, beUsed, 0, n, m, alpha); free(beUsed);
free(result);
}
执行代码如下: #include <stdio.h>
#include "./include/permutation.h" int main() {
char alpha[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int n;
int m; printf("请你输入n和m:");
scanf("%d%d", &n, &m); permutatation(alpha, n, m); return 0;
}

全排列问题(c语言实现)的更多相关文章

  1. 递归实现全排列序列C语言实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下鄙人用递归回溯的办法,采用C语言实现了全排列序列,用以某些优化方案的原始方案的给定 #incl ...

  2. 深度搜索优先(全排列)//本内容来自《啊哈!算法》或者英文名《Aha!Algorithms》)

      package Mypackage; import java.util.Scanner; public class 全排列{ static int a[]=new int[10]; static ...

  3. c语言的全排列

    在c语言中实现全排列,对于刚接触c语言,还没学习算法的人来说,比较困难了吧.估计大佬也不会看这种基础的东西,全排列实现的办法很多,在c++中有一个专门的函数可以使用,但是在c中实现就有点困难了.如果你 ...

  4. C语言实现全排列

    实现全排列,递归实现 #include <stdio.h> #include <stdlib.h> ; void swap(int *a, int *b) { int m; m ...

  5. C语言实现全排列和回溯法总结

    一.递归实现全排列 #include"cstdio" ]; void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i ...

  6. C语言程序设计100例之(31):全排列问题

    例31   全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 n(1≤n≤9) 输出格式 由1-n组成的所有不重复的数字 ...

  7. 递归实现1-n的全排列(JAVA语言)

    思路: For example: 123的全排列= 1在最前面 23的全排列 + 2在最前面 13的全排列 + 3最前面 12的全排列 所以只需交换和最前面元素的位置,生成剩余元素的全排列即可. im ...

  8. 枚举全排列(包括数列中有重复数)的C语言实现

    据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...

  9. C语言全排列

    #include <stdio.h> int m=5; char s[]="12345"; void Swap(char *a, char *b)//元素交换 { ch ...

随机推荐

  1. 在虚拟机上安装gho、esd(wim)系统镜像文件

    gho.esd(wim)等文件不能被虚拟机识别,但如果把它们打包成iso就可以了. 另外,还需用到能在虚拟机上运行的WinPE的iso文件,本文用的是微PE. 注意:安装虚拟机提示operating ...

  2. css背景样式background

    background用来定义html元素的背景效果 background-color:定义元素的背景颜色,背景的颜色值通常有三种定义方法 1.十六进制方式,如"#ff0000" 2 ...

  3. SolrCloud集群配置

    前提: 1,已经做好zookeeper集群或伪集群配置. 2,已将solr部署到tomcat中 接下来,我们将zookeeper与tomcat进行关联 vim tomcat/bin/catalina. ...

  4. 面试题:JS中map的陷阱

    题目: ['2', '3', '4'].map(parseInt); 请说出上面代码的执行结果 错误回答: [2, 3, 4] 真正答案: [2, NaN, NaN] 解析: 因为 map 的算子是有 ...

  5. spring是如何控制事务

    1.spring的核心是ioc和aop,其中ioc是将控制权交由spring容器进行管理,aop是面向切面编程,内部实现使用的是动态代理,二动态代理内部实现用的是反射.spring的事务是通过aop来 ...

  6. UnicodeEncodeError: 'utf-8' codec can't encode character '\udce4' in position 1: surrogates not allowed根本解决方法

    下午开发新改的代码在print路径时出现上述问题,如下: Traceback (most recent call last): File "./update.py", line 6 ...

  7. rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计

    非集群下,简单的说:- 如果是excl,则设置durability没有意义,因为不管服务器挂了还是客户端主动/被动断开了,队列都会自动删除.- auto-delete,其实可简单的认为是同理,即使非e ...

  8. 快速阅读《QT5.9 c++开发指南》1

    简介:<QT5.9 c++开发指南>的作者是和i三位主要从事地球物理探测仪器设计.数据处理方法研究和软件开发等工作的博士们,这本书以QT Widget为主要内容,比较全面地教授了QT开发桌 ...

  9. 论证与测试 + 用EA画uml

    论证与测试,谁才是真正的不二法门 第十三次作业的时候,我们开始使用Junit对代码进行测试,主要是测试代码的覆盖率,以及分支的覆盖率.(主要是检查JSF写的是否是符合规范,……). 这里我给出我测试的 ...

  10. poj 2942 Knights of the Round Table - Tarjan

    Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress ...