zoukankan      html  css  js  c++  java
  • 全排列问题(c语言实现)

    问题描述:

    假设有数组里面存放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
    ", 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;
    }
    



  • 相关阅读:
    鸟哥的linux私房菜学习-(八)Linux 文件与目录管理
    我的作品
    聊聊软件测试面试的一些事
    如何做一名专业的软件测试工程师
    测试Leader应该做哪些事
    软件测试工程师的岗位职责
    一个完整的性能测试流程
    做接口测试需要哪些技能
    软件质量保障体系建设
    性能测试常见瓶颈分析及调优方法
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9102884.html
Copyright © 2011-2022 走看看