笔试题整理 第二题

班上同学聚餐吃火锅,一锅煮了m(1<=m<=50)个鱼丸和n(1<=n<=50)个肉丸,现欲将m个鱼丸和n个肉丸分到k(1<=k<=50)个碗中,允许有空碗,鱼丸和肉丸不允许混在同一个碗里,问共有多少种装法?

假设碗足够大,能够装50个鱼丸和50个肉丸,并且碗没有任何区别。因此当m等于n等于1,k等于3时,有一种装法,因为110,101,011被看做同一种方法。

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;
int res = 0;

/** 请完成下面这个函数,实现题目要求的功能 **/
 /** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^  **/
void ballAllocate(int m, int n, int k, int p, int q) {
    if (m == 0 && n == 0)
    {
        res++;
        return;
    }
    if (k == 0)
        return;
    if (m > 0)
    {
        for (int i = p; i > 0; i--)
            ballAllocate(m - i, n, k - 1, i, q);
        return;
    }

    if (n > 0)
    {
        for (int i = q; i > 0; i--)
            ballAllocate(m, n - i, k - 1, p, i);
    }
}

int main() {

    int _m=5;
    int _n=5;
    int _k=10;

    ballAllocate(_m, _n, _k, _m, _n);
    cout << res << endl;

    system("pause");
    return 0;
}

分析:

这题开始不久我就想出来思路了,就是先放鱼丸,再放肉丸,当碗不够之前,如果都放完了就是一种方法,不够了就不再继续放了。同时为了保证不会有重复,每个碗放的丸子不会多于同类型的上个碗。

但是我依然没有在笔试中做出来。

因为我没写出来!思路对着呢,但是我有点慌了,而且写的细节里有很多错误,没有编辑器我写的很不顺手,有些调试功能的手段都用不上。

唉,我还是欠练啊。

原文地址:https://www.cnblogs.com/CJT-blog/p/10698798.html

时间: 2024-10-29 04:58:23

笔试题整理 第二题的相关文章

嵌入式c笔试题(整理)

嵌入式c笔试题 (2012-03-24 22:36) 预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的

iO经典笔试题整理

iOS经典笔试题整理---2014年8月 1.回答person的retainCount值,并解释为什么 Person * per = [[Person alloc] init]; 此时person 的retainCount的值是1self.person = per; 在self.person 时,如果是assign,person的 retainCount的值不变,仍为1若是:retain person的retainCount的值加1,变为2 若是:copy person的retainCount值

Java工程师笔试题整理[校招篇]

隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打好Java基础:如何一步一步的学Java - 学习编程 - 知乎专栏.然后再来看一下练习一下各大厂的面试笔试题目. 如果以下内容满足不了你,你还可以去看这篇: 2016校招编程题汇总 - 学习编程 - 知乎专栏 进入主要内容(主要内容整理来自牛客网:牛客网)(以下内容按照各大公司进行划分,对每一公司按照年份进行划分,如果想想下载以下内容,可以

2018春招-今日头条笔试题-第三题(python)

题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 本题的做法最重要的应该是如何拼出'1234567890',对于输入表达试获得对应的结果利用python内置函数eval()即可以实现.利用5个字符串来表达'1234567890',如下(为了好看,里面加了tab空格符) '66666 ....6 66666 66666 6...6 66666 66666 66666 66666 66666''6...6 ....6 ....6 ....6 6...6 6.... 6

sql笔试题整理

题记:一直在写各种sql查询语句,最长的有一百多行,自信什么需求都可以接,可......,想了想,可能一直在固定的场景下写,平时也是以满足实际需求为目的,竟不知道应试的题都是怎么出的,又应该怎么做.遂找来一些笔试题来练习. 有四张表如下格式存储: --1.查询"001"课程比"002"课程成绩高的所有学生的学号: select t1.s# from (select s#,c#,score from sc where c# = 001) t1 inner join (

笔试题整理 第三题

#include <iostream> #include <vector> using namespace std; bool flag_fir = true; int count_sec(vector<vector<int>> all_sec,vector<int> cur_set) { int len = cur_set.size(); int num = 0; if (len == 0) return 1; else if (flag_fi

2018 CVTE 前端校招笔试题整理

昨天晚上(7.20)做了CVTE的前端笔试,总共三十道题,28道多选题,2道编程题 .做完了之后觉得自己基础还是不够扎实,故在此整理出答案,让自己能从中得到收获,同时给日后的同学一些参考. 首先说一下两道肥肠简单的编程题: 1.请实现这样一个函数,输入参数为一个长度为2n的整数数组,以两个整数一组的方式将数据分组,并使每组数组最小值相加为最大,输出这个最大值. 输入[1,4,3, 2],输出为4输入[1,5,7,9, 4, 12],输出为15 思路:把数组按大小排序然后相邻两项分为一组,取每组较

腾讯前端笔试题整理

1.js中“5”+4=? 答案:“54” 2.js中void(0)=? 答案:undefined 评:这个在a的href 中可以使用javascript:void(0); 如果使用href=”#”,包含了一个位置信息.默认的锚是#top,也就是网页的上端,当连续快速点击此链接时会导致浏览器巨慢甚至崩溃.javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. javascript:;好些,javascript:void(0);据说某些情况下有浏览器兼容bug.(此点

大众点评笔试题最后两题题解

问题1: 这是一道动态规划的问题,状态转移方程为 dp[i] = dp[i-3] + dp[i-1] , i>= 3(i<3时dp[i]=1,仅仅有1种情况) 我这里直接开了一个dp数组解决问题.在init方法中进行了初始化. 另外,考虑到为了方便測试,我用了一个递归函数dfs(m,n,str)来进行对全部情况的输出.详细见代码:dfs函数的功能就是输出全部的可行方案. 如:当我输入5的时候,输出: 4 全部方案: 11111 211 121 112 同一时候我设定了数n的范围,当n<0