zoukankan      html  css  js  c++  java
  • 抽签

    抽签

    X星球要派出一个5人组成的观察团前往W星。
    其中:
    A国最多可以派出4人。
    B国最多可以派出2人。
    C国最多可以派出2人。
    ….

    那么最终派往W星的观察团会有多少种国别的不同组合呢?

    下面的程序解决了这个问题。
    数组a[] 中既是每个国家可以派出的最多的名额。
    程序执行结果为:
    DEFFF
    CEFFF
    CDFFF
    CDEFF
    CCFFF
    CCEFF
    CCDFF
    CCDEF
    BEFFF
    BDFFF
    BDEFF
    BCFFF
    BCEFF
    BCDFF
    BCDEF
    ….
    (以下省略,总共101行)

    #include <stdio.h>
    #define N 6
    #define M 5
    #define BUF 1024
    
    void f(int a[], int k, int m, char b[])
    {
        int i,j;
    
        if(k==N){ 
            b[M] = 0;
            if(m==0) printf("%s
    ",b);
            return;
        }
    
        for(i=0; i<=a[k]; i++){
            for(j=0; j<i; j++) b[M-m+j] = k+'A';
            ______________________;  //填空位置
        }
    }
    int main()
    {   
        int  a[N] = {4,2,2,1,1,3};
        char b[BUF];
        f(a,0,M,b);
        return 0;
    }

    仔细阅读代码,填写划线部分缺少的内容。

    注意:不要填写任何已有内容或说明性文字。

    正解代码:

    #include <stdio.h>
    #define N 6
    #define M 5
    #define BUF 1024
    int count = 0;
    
    void f(int a[], int k, int m, char b[])
    {
        int i,j;
    
        if(k==N){ 
            b[M] = 0;
            if(m==0)
            {
                count++;
                printf("%s
    ",b);
            }
            return;
        }
    
        for(i=0; i<=a[k]; i++){
            for(j=0; j<i; j++) 
                b[M-m+j] = k+'A';
            //______________________;  //填空位置
            f(a, k+1, m-i,b);
        }
    }
    int main()
    {   
        int  a[N] = {4,2,2,1,1,3};
        char b[BUF];
        f(a,0,M,b);
        printf("count->%d
    ", count);
        return 0;
    }
  • 相关阅读:
    DBMS_SCHEDULER 的使用
    Android 鲜为人知的 8 个小秘密
    你正在使用的移动电话已经 40 岁
    HDU1056:HangOver
    Firefox OS 源码泄露!!!
    上网本 硬盘安装linux 最揪心的回忆
    103 Stacking Boxes
    ip2long之后有什么好处?
    mysql怎么创建,删除,查看索引?
    用mysql查询某字段是否有索引
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538231.html
Copyright © 2011-2022 走看看