排列和组合算法的实现方法_C语言经典案例_C 语言

排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现。

本人在经过多次摸索和思考之后,总结如下,以供参考。

程序代码如下:

#include <stdio.h>
#include <stdlib.h>

char array[] = "abcd";

#define N 4
#define M 3
int queue[N] = {0};
int top = 0;
int flag[N] = {0};

 void perm(int s, int n)
 {
   int i;

   if (s > n)
   {
     return;
   }

   if (s == n)
   {
     for (i = 0; i < n; i++)
     {
       printf("%c", queue[i]);
     }
     printf("\t");
     return ;
   }

   for (i = 0; i < n; i++)
   {
     if (flag[i] == 0)
     {
       flag[i] = 1;
       queue[s] = array[i];
       perm(s+1, n);
       flag[i] = 0;
     }
   }
 }

 void comb(int s, int n, int m)
 {
   int i;

   if (s > n)
     return ;

   if (top == m)
   {
     for (i = 0; i < m; i++)
     {
       printf("%c", queue[i]);
     }
     printf("\t");
     return ;
   }

   queue[top++] = array[s];
   comb(s+1, n, m);
   top--;
   comb(s+1, n, m);

 }

 int main()
 {
   printf("\nperm():\n");
   perm(0, N);
   printf("\ncombination():\n");
   comb(0, N, M);
   printf("\n");
   return 0;
 }

运行结果:

perm():
abcd  abdc  acbd  acdb  adbc  adcb  bacd  badc  bcad  bcda
bdac  bdca  cabd  cadb  cbad  cbda  cdab  cdba  dabc  dacb
dbac  dbca  dcab  dcba
combination():
abc   abd   acd   bcd

以上就是小编为大家带来的排列和组合算法的实现方法_C语言经典案例的全部内容了,希望对大家有所帮助,多多支持~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言排列组合算法、c语言全排列递归算法、c语言全排列算法、c语言排列算法、c语言全排列算法思路,以便于您获取更多的相关知识。

时间: 2024-10-03 22:00:46

排列和组合算法的实现方法_C语言经典案例_C 语言的相关文章

python以环状形式组合排列图片并输出的方法

 这篇文章主要介绍了python以环状形式组合排列图片并输出的方法,涉及Python使用pil库操作图片的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python以环状形式组合排列图片并输出的方法.分享给大家供大家参考.具体分析如下: 这段代码可以自定义一个空白画板,然后将指定的图片以圆环状的方式排列起来,用到了pil库,可以通过: pip install pil 的方式安装. 具体代码如下: 代码如下: # -*- coding: utf-8 -*- __autho

win8.1在运行窗口输入gpedit.msc打不开组策略解决方法

  win8.1在运行窗口输入gpedit.msc打不开组策略解决方法 1.在此需要说明的一点是,对于核心版本的Win8.1系统,并没有提供"组策略编辑"程序.我们可以通过以下方法来查看自己的电脑中是否存在"GPEDIT.MSC"程序: 2.打开"运行"对话框(按Win+R可打开),输入"%SystemRoot% system32"并按回车; 3.进入该目录,查找是否存在"gpedit.msc"文件.如图,

Win7 64位纯净版系统禁用(关闭)家庭组功能的方法

  Win7系统禁用家庭组功能的方法步骤如下: 1.首先在键盘按下"WIN+R"组合键打开"运行"窗口,在框中输入"Services.msc"命令后按回车打开本地服务窗口; 2.在弹出来的服务界面中,在右侧窗口中找到并双击HomeGroup Listener和HomeGroup PRovider这两项服务,然后分别停止和禁用这两个服务; 3.然后重启计算机即可生效,这样win7中的家庭组功能就禁用成功了.(PS:如果遇到服务无法停止的现象,请先确

python以环状形式组合排列图片并输出的方法_python

本文实例讲述了python以环状形式组合排列图片并输出的方法.分享给大家供大家参考.具体分析如下: 这段代码可以自定义一个空白画板,然后将指定的图片以圆环状的方式排列起来,用到了pil库,可以通过: pip install pil 的方式安装. 具体代码如下: 复制代码 代码如下: # -*- coding: utf-8 -*- __author__ = 'www.jb51.net' import math from PIL import Image def arrangeImagesInCir

深入理解C语言的逻辑控制_C 语言

本文对C语言的逻辑控制做一番较为深入的探讨,一般来说C语言的逻辑控制语句主要有如下的7种: 1. goto 最强大,但一般只在特殊环境下使用. 2. if else 3. ?: 4. switch case 5. for 6. while 7. do while 自从dijkstra的论文Go To Statement Considered Harmful以后,C语言代码很少看到goto了.(一般用在多次资源分配的错误处理上) 但,从计算机的角度来说,缺少goto(jmp指令)还真没法干活.其实

手机QQ预约群组电话使用方法图解

★手机qq预约群组电话在哪? 我们在手机中进入到QQ群,然后我们点击"群电话"具体:打开手机QQ,然后找到一个qq群或讨论组点击进入[预约电话功能]效果如下图所示: ★手机QQ预约群组电话怎么用? 1,现在我们打开QQ然后点击[联系人]在下面找到[群/组]效果如下所示的 2,然后进入之后你会看到右上角有一个[电话]现在我们点击[预约群组电话],如下图所示: 3,好了现在我们就可以进行添加新成员加入,其它的都是一个附加时间了我们可以进行设置也可以不设置了: 4,好了最后填写一下我信手机Q

php仿微信红包分配算法的实现方法_php技巧

本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @param int $money 用于分配的金额 * @param int $num 分配人数 */ function RandomMoney($money, $num) { echo "$money元随机分成$num份分别是:<br/>"; $remain=$money; $use=0; for ($i=1; $i<$nu

《C语言程序设计:问题与求解方法》——2.4节C语言源程序的次要组成成分:编译预处理命令、注释和声明

2.4 C语言源程序的次要组成成分:编译预处理命令.注释和声明下面我们通过更为完整的例题2.2来探讨C语言源程序的其他构成成分.[例题2.2]输入圆球的半径,求圆球的体积.C语言源程序如下: 0 /* 1 作者: 何勤 2 编写日期: 2009-12-25 3 功能: 输入圆球的半径,求圆球的体积 4 例题2.2 5 */ 6 #include <stdio.h> 7 #define PI 3.1416 /*指定符号常量PI的值为 3.1416 */ 8 int main(void) 9 {

MySQL的C语言API接口_C 语言

1.首先当然是连接数据库,函数原型如下: MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); 第一个参数 MYSQL是 C api中一个非常重要的变量,里面内存非常丰富