浅谈c语言中一种典型的排列组合算法

 更新时间:2017年05月14日 08:54:26   投稿:jingxian  
下面小编就为大家带来一篇浅谈c语言中一种典型的排列组合算法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天

全排列:

#include<stdio.h>

void swap(int *p1,int *p2)

{

int t=*p1;

*p1=*p2;

*p2=t;

}

void permutation(int a[],int index,int size)

{

if(index==size)

{

for(int i=0;i<size;i++)

printf("%d ",a[i]);

printf("\n");

}

else

{

for(int j=index;j<size;j++)

{

swap(&a[j],&a[index]);

permutation(a,index+1,size);//此处用到递归思想

swap(&a[j],&a[index]);

}

}

}

int main()

{

int n;

scanf("%d",&n);

int a[n];

for(int i=0;i<n;i++)

a[i]=i+1;

permutation(a,0,n);

return 0;

}

 

组合:

#include<stdio.h>

void combine(int n,int m,int a[],int b[],const int M)

{

for(int j=n;j>=m;j--)

{

b[m-1]=j-1;

if(m>1)combine(j-1,m-1,a,b,M);//用到了递归思想

else

{

for(int i=M-1;i>=0;i--)printf("%d ",a[b[i]]);

printf("\n");

}

}

}

int main()

{

int n,m;

scanf("%d%d",&n,&m);

int a[n];int b[m];

for(int i=0;i<n;i++)

a[i]=i+1;

const int M=m;

combine(n,m,a,b,M);

}

以上这篇浅谈c语言中一种典型的排列组合算法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++实现LeetCode(160.求两个链表的交点)

    C++实现LeetCode(160.求两个链表的交点)

    这篇文章主要介绍了C++实现LeetCode(160.求两个链表的交点),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 概率的问题:使用递归与多次试验模拟的分析

    概率的问题:使用递归与多次试验模拟的分析

    以下对概率的问题:使用了递归和多次试验模拟。需要的朋友参考下
    2013-05-05
  • C++ 函数指针详细总结

    C++ 函数指针详细总结

    这篇文章主要介绍了C++ 函数指针内容,下面文章围绕C++ 函数指针的相关资料展开详细内容,包括函数指针的进阶内容,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • C++编程产生指定范围内的随机数

    C++编程产生指定范围内的随机数

    这篇文章主要为大家详细介绍了C++编程产生指定范围内的随机数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • C++之CNoTrackObject类和new delete操作符的重载实例

    C++之CNoTrackObject类和new delete操作符的重载实例

    这篇文章主要介绍了C++之CNoTrackObject类和new delete操作符的重载实例,是C++程序设计中比较重要的概念,需要的朋友可以参考下
    2014-10-10
  • C++软件添加dump调试打印日志(推荐)

    C++软件添加dump调试打印日志(推荐)

    下面小编就为大家带来一篇C++软件添加dump调试打印日志(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • C++ Boost Optional示例超详细讲解

    C++ Boost Optional示例超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C++基于CMD命令行实现扫雷小游戏

    C++基于CMD命令行实现扫雷小游戏

    这篇文章主要为大家详细介绍了C++基于CMD命令行实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 从汇编看c++中extern关键字的使用

    从汇编看c++中extern关键字的使用

    本篇文章介绍了,在c++中extern关键字的使用概述,需要的朋友参考下
    2013-05-05
  • C++编译原理之求解First集合

    C++编译原理之求解First集合

    这篇文章主要介绍的是C++/编译原理求解First集合,本文将围绕该话题详细展开全文,需要的小伙伴可以参考一下
    2021-10-10

最新评论