zoukankan      html  css  js  c++  java
  • 蓝桥杯——代表团出访——C++

    问题描述:

    X星球要派出一个5人组成的观察团前往W星。
    其中:
    A国最多可以派出4人。
    B国最多可以派出2人。
    C国最多可以派出2人。
    D国最多可以派出1人。
    E国最多可以派出1人。
    F国最多可以派出3人。
    那么最终派往W星的观察团会有多少种国别的不同组合呢?

    解决思路

     按照有重复元素的组合方法组合,并进行筛选

    本质上也是形成一棵树

    源代码

    #include<iostream>
    #include<cstring>
    using namespace std;
    int N=0;
    int R[6]={0};  //初始化为零,方便操作 ,存放结果的数组 
    int M[6]={4,2,2,1,1,3};//解决这类问题的模板 
    void Display()//显示国别的函数 
    {
        for(int i=0; i<6; i++ )  //遍历结果数组 
        {
            for(int j=1; j<=R[i]; j++)//各国派出多少人 
            {
                char temp='A'+i;
                cout<<temp;
             } 
        } 
        cout<<endl;
    }
    void Combination(int k,int goal)//组合函数 
    {   
        if(k==6)   //出口,无论如何都要结束 
        {
            if(goal==0) //选择可行的结果 
            {
                Display();
                N++;
            }
            return; 
        }
        int Limit=min(goal,M[k]);//  点睛之笔,应该好好理解 
        for(int i=0; i<=Limit;i++)//位置k上可能存在的几种情况,深度优先搜索 
        {
            R[k]=i;
            Combination(k+1,goal-i);
        }
        R[k]=0;               //再这次深度优先完成之后,恢复状态,以便在此进行此深度的搜索 
    }
    int main()
    {   
        Combination(0,5);
        cout<<N<<endl;
        return 0; 
     } 

     运行结果

  • 相关阅读:
    LeetCode: Maximum Product Subarray 解题报告
    LeetCode: Populating Next Right Pointers in Each Node II 解题报告
    LeetCode: Populating Next Right Pointers in Each Node 解题报告
    LeetCode: Word Search 解题报告
    C语言文件操作
    多线程
    C语言函数指针的使用
    进程
    网络编程
    进程间通信——管道通信
  • 原文地址:https://www.cnblogs.com/Howbin/p/8683589.html
Copyright © 2011-2022 走看看