• k种球若干,取n个球,输出所有取球方案 (模拟)


    有K种颜色的小球(K<=10),每种小球有若干个,总数小于100个。
    现在有一个小盒子,能放N个小球(N<=8),现在要从这些小球里挑出N个小球,放满盒子。
    想知道有哪些挑选方式。注:每种颜色的小球之间没有差别。

    请按数字递增顺序输出挑选小球的所有方式。

    如有3种颜色,每种颜色小球的个数分别为a:1,b:2,c:3,挑出3个小球的挑法有:
    003,012,021,102,111,120

    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<vector>
    #include<stack>
    #include<numeric>
    using namespace std;
    struct node
    {
        int num;
        vector< vector<int> > v;//两个容器嵌套,记录取球方案
    };
    int main()
    {
        int n, k;
        cin >> k >> n;
        vector<node> ball(k);
        for (int i = 0; i < k; i++)
        {
            int t;
            cin >> t;
            ball[i].num = t;
        }
        if (k == 1)//只有一种方案
            cout << n << endl;
        else
        {
            vector<int>temp;
            for (int i = 0; i <= ball[0].num; i++)//初始化,第一种球的取法
            {
                temp.push_back(i);
                ball[0].v.push_back(temp);
                temp.clear();
            }
            for (int i = 1; i < k; i++)//取那种球
            {
                for (int j = 0; j < ball[i - 1].v.size(); j++)//取第i种球之前有几种方案
                {
                    for (int x = 0; x <= ball[i].num; x++)//第i种球可以取多少个
                    {
                        temp = ball[i - 1].v[j];//取第i-1种球的第j种方案
                        temp.push_back(x);//第i种球取x个
                        if (i == k - 1)//取完K种球并且球的总数为N(k-1是因为第一种球初始化处理了)
                        {
                            if (accumulate(temp.begin(), temp.end(),0) == n)//输出方案
                            {
                                for (int y = 0; y < temp.size(); y++)
                                    cout << temp[y];
                                cout << endl;
                            }
                        }
                        else
                            if (accumulate(temp.begin(), temp.end(),0) <= n)
                                ball[i].v.push_back(temp);//取完第i种球之后的取球方案
                        temp.clear();
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    hbase 自定义过滤器
    idea的protobuf使用
    Docker自动补全容器名
    Docker普通用户不使用sudo提权
    Hadoop安装错误总结
    Git中撤销提交
    Python经典算法片段
    Git设置彩色输出
    Git同步远程fork的项目
    Git错误汇总
  • 原文地址:https://www.cnblogs.com/-citywall123/p/11704312.html
Copyright © 2020-2023  润新知