问题描述:

假设有数组里面存放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. Golang字符串函数认识(二)

    package main import ( "fmt" "strings" ) func main(){ //返回字符在指定字符串中最后一次出现的位置 last ...

  2. P3804 【模板】后缀自动机

    P3804 [模板]后缀自动机 后缀自动机模板 详情可见luogu题解板块 #include<iostream> #include<cstdio> #include<cs ...

  3. jquery获取包含本身的元素

    我们知道,使用jquery获取一个元素内的所有元素非常容易,使用jQuery.html()就可以. 如果是js语法的话,使用domObj.innerHTML也很容易实现. 那么问题来了,要想获取包涵节 ...

  4. 如何用git将项目代码上传到github

    注册账户以及创建仓库 要想使用github第一步当然是注册github账号了.之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之 ...

  5. shell if 语句

    一.过程式 编程语言的代码执行顺序: a.顺序执行:逐条执行: b.选择执行: 代码有一个分支:条件满足时才会执行: 俩个或以上的分支:只会执行其中一个满足条件的分支: c.循环执行: 代码片段(循环 ...

  6. python ---24 正则表达式 re模块

    一.正则表达式 1.字符组 ① [abc] 匹配a或b或c ②  [a-z] 匹配a到z之间的所有字⺟ [0-9]匹配所有阿拉伯数字 2.元字符 3.量词 4.重要搭配 ①  .*? ②  .*?x  ...

  7. 将svn下载的项目转化为java project

    1.选中项目,右键点击弹出窗口,点击窗口中的[Properties],弹出[Properties for test]窗口, 如下: 2.点击窗口中的[Project Facets],右边显示[Conv ...

  8. topcoder srm 485 div1

    problem1 link 枚举第一个数和第二个数即可确定公差. problem2 link 设高度为$n$,宽度为$m$,且$n \ge m$ 如果$m \ge 5$,那么答案为0.这个可以通过抽屉 ...

  9. VS2015密钥

    Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...

  10. Win32汇编学习(3):简单的窗口

    这次我们将写一个 Windows 程序,它会在桌面显示一个标准的窗口,以此根据代码来学习如何创建一个简单的窗口. 理论: Windows 程序中,在写图形用户界面时需要调用大量的标准 Windows ...