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; 
     } 

     运行结果

  • 相关阅读:
    python模块--time模块
    python模块--如何相互调用自己写的模块
    Animating Views Using Scenes and Transitions
    fragment 切换
    android textview 设置text 字体
    android intent 5.1
    android EditView ime
    animation of android (4)
    animation of android (3)
    animation of android (2)
  • 原文地址:https://www.cnblogs.com/Howbin/p/8683589.html
Copyright © 2011-2022 走看看