题解 | #牛牛的导弹系统#

牛牛的导弹系统

http://www.nowcoder.com/practice/0105ceb444b64354bed664f816125436

一.题目描述
NC568牛牛的导弹系统
导弹阵地每天希望发射至少M粒导弹到敌国阵地,但是因为牛国科技问题,一个导弹系统每天只可以发射一粒导弹,并且当连续发射A天时,机器就需要冷却B天才可以继续使用。同时我们知道导弹系统在交接的时候,至少需要有一个导弹系统是可以工作的,不然敌国会乘机攻击我们。也就是说除了第一天部署导弹系统的时候,我们在部署导弹前要保证有一个导弹系统是可以使用的。你该如何决策每天的导弹系统部署,期望以最少的导弹系统满足这个上级的指示要求。
注意:每个导弹系统最多且一定要连续发射A天。
返回:数字 Z 代表最少部署的导弹系统数目
图片说明
二.算法(数学)
题目意思理解为:最少需要多少导弹系统可以保证每一天都有发射出M颗导弹并且保证在交接的时候至少有一个导弹系统是可以工作的,每当一个导弹系统连续发射A天的时候,需要冷却B天才可以继续使用。下面是对结果的推导:
图片说明

下面是完整代码:

class Solution {
public:
    int solve(int A, int B, int M) {
        return ((A+B)/A+1)*M;
    }
};

时间复杂度: 直接数学公式计算
空间复杂度: 不需要额外的空间
优缺点:思考过程很麻烦,但是代码实现真的是很简单
三.算法(分情况讨论)
算法二数学推导的味道太浓了,下面我们将采用分类讨论的思想来解决这道题目,我们将分三类情况来讨论:
(1):就是说明每天都需要M个导弹系统所以 就可以满足了,但是由于要求在导弹系统交接的时候必须要至少一个导弹系统是可以工作的,所以又要拿出M个导弹系统在交接的时候用于发射导弹,所以需要个导弹系统
(2):由于连续发射的天数大于冷却的天数,所以不需要额外的M个导弹系统来用于交接时发射导弹,所以个导弹系统就可以了。
(3):由于冷却的时间大于连续发射的时间所以为了保证每天发射M颗导弹需要,但是由于要交接时候发射导弹,所以还需要加上M个导弹系统最后需要个导弹
下面是完整代码:

class Solution {
public:
    int solve(int A, int B, int M) {
        if(A==B){
            return 3*M;
        }
        if(A>B){
            return 2*M;
        }
        return M*(B/A+2);
    }
};

时间复杂度: 直接判断给出答案
空间复杂度: 不需要额外的空间
优缺点:思考过程相比于算法二简单,代码实现也是比较简单

全部评论

相关推荐

阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
如题,求问华为1145和25定律是什么意思?刷到好多人说这个东西了,不知道什么意思
我能加班:如果你在主管面试完当天晚上11点45分收到面试反馈邮件的话,大概率是通过主管面试了。25小时是指在你主管面完成收到短信后的25小时你可以在官网查到你是不是通过。 应该是这样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务