C语言中,输出一组数的排列和组合

原创 2017年05月22日 15:00:55

N个元素中取出M个元素的所有排列

#include <stdio.h>

#define MAX 10

void print();
void Perm(int step);

int used[MAX] = {0}; 
int result[MAX] = {0}; 
int M, N;

int main()
{
    printf("Please input N M = ");
    scanf("%d %d", &N, &M);
    printf("N = %d, M = %d\n", N, M);
    Perm(0);
    return 0; 
}
void print() 
{ 
    int i;
    for(i = 0; i < M; i++) 
    {
        printf("%d ", result[i]); 
    }
    printf("\n");
}
void Perm(int step)
{ 
    int i; 
    if (step == M)
    { 
        print();
    } 
    else
    {
        for(i = 0; i < N; i++)
        {
            if (!used[i]) 
            {
                used[i] = 1;
                result[step] = i + 1;
                Perm(step + 1);
                used[i] = 0;
             }
        }    
    }
}

代码的实现

N个元素中取出M个元素的所有组合

#include <stdio.h>

#define MAX 20

int c[MAX] = {0};
int M, N;

void print();
void comp(int);

int main()
{
    printf("Please input N M = ");
    scanf("%d %d", &N, &M);
    printf("N = %d, M = %d\n", N, M);

    comp(1);

    return 0;
}
void print()
{
    int i;
    for (i = 0; i < M; i++)
    {
        printf("%d", c[i + 1]);
    }
    printf("\n");
}
void comp(int m)
{
    if (m == M + 1)
    {
        print();    
    }
    else
    {
        for (c[m] = c[m - 1] + 1; c[m] <= N - M + m; c[m]++) 
        {
            comp(m + 1);
        }
    }
}

代码的实现

版权声明:不积跬步无以至千里,愿与君共勉! https://blog.csdn.net/Crazy_Tengt/article/details/72626499

C语言及程序设计初步

课程针对没有任何程序设计基础的初学者,全面介绍C语言及利用C语言进行程序设计的方法。课程注重知识的传授,更关注学习者能够通过实践的方式,真正学会利用C语言解决问题,奠定程序设计的基础。为此,专门设计了实践方案,指导学习者在听讲的同时,有效完成实践。讲课中还适时穿插进行学习指导,帮助初学者尽快掌握程序设计的学习方法。
  • 2015年01月05日 10:08

C语言程序:一组没规律的数字,从小到大排列

  • 2011年03月31日 10:27
  • 691B
  • 下载

C语言实现排列/组合算法

/* *  文件名:Permutation.c*  用途:全排列算法*  编程环境:WinXP SP2+CL 8.0*  完成日期: 2006.2   Ver 0.01*  作者: 88250*  联...
  • DL88250
  • DL88250
  • 2007-05-06 17:23:00
  • 10914

c语言排列组合还可以这样求

本文主要讲编程比赛中常用的排列组合。 首先,排列组合的公式是(其中P代表的就是A) 最普通的算法就是按照公式求了,即分子算出来,分母算出来,然后相除,写成代码为: int c( int m,int ...
  • qq_39627843
  • qq_39627843
  • 2017-08-19 11:07:48
  • 590

C语言如何打印一个数组排列组合?

这道题真好,需要多看几遍呢! 转载:https://segmentfault.com/a/1190000000725176 问题来自《Linux C一站式编程》,是个挺有意思的题目。 ...
  • lin_FS
  • lin_FS
  • 2016-09-15 10:17:26
  • 2443

C语言实现排列组合

c语言实现排列组合算法问题 排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下: 首先看递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消...
  • wangshengfeng1986211
  • wangshengfeng1986211
  • 2014-08-04 11:02:56
  • 21920

C语言——排列组合

# include int main() { long C(long n, long m);//定义计算排列组合的函数 long numbern, numberm, numberc;//应满足...
  • smallkkk
  • smallkkk
  • 2015-03-28 12:37:03
  • 215

排列和组合算法 C语言经典实现

排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现。 本人在经过多次摸索和思考之后,总结如下,以供参考。 程序代码如下:  1 #include  2 #includ...
  • huangkangying
  • huangkangying
  • 2011-10-12 17:51:54
  • 26525

c语言对一组数据随机排序

/* * * 程序功能:对指定的数组,进行随机排序,交换数组中的数据位置 */ #include #include void swap(int *tempa,int *tempb); v...
  • huihuang1515
  • huihuang1515
  • 2013-10-12 16:39:41
  • 1897

c语言实现输出一个数的每一位

比如输入1234,在屏幕上打印出1 2 3 4 代码展示: 方法一: #define _CRT_SECURE_NO_WARNINGS 1 #include #include 实现打印一个数的每一位 i...
  • peiyao456
  • peiyao456
  • 2016-04-12 10:55:50
  • 2006
收藏助手
不良信息举报
您举报文章:C语言中,输出一组数的排列和组合
举报原因:
原因补充:

(最多只允许输入30个字)