一.题目描述
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);
    }
};

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