首页 > 试题广场 >

牛牛的导弹系统

[编程题]牛牛的导弹系统
  • 热度指数:577 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛国在导弹阵地部署导弹系统,根据上级指示精神,这个导弹阵地每天希望发射至少M粒导弹到敌国阵地,
但是因为牛国科技问题,一个导弹系统每天只可以发射一粒导弹,并且当连续发射A天时,机器就会过热导致系统需要冷却B天才可以继续使用。
同时我们知道导弹系统在交接的时候,至少需要有一个导弹系统是可以工作的,不然敌国会乘机攻击我们。
也就是说除了第一天部署导弹系统的时候,我们在部署导弹前要保证有一个导弹系统是可以使用的。
作为牛国的军事官,你该如何决策每天的导弹系统部署,期望以最少的导弹系统满足这个上级的指示要求。
注意:每个导弹系统最多且一定要连续发射A天。

返回:数字 Z 代表最少部署的导弹系统数目


示例1

输入

4,3,2

输出

4

说明

一种情况是,我只需要在 第一天布置两个导弹系统,第四、五天分别布置一个导弹系统,即可满足每天至少有两颗导弹打到对方阵地 
示例2

输入

3,3,1

输出

3

说明

一种情况是,我只需要在 一,三,五这三天布置导弹系统,即可满足每天至少有一颗导弹打到对方阵地 

备注:

1<=A,B<=1000000

A≠1

1<=M<=1000

class Solution {
public:
    /**
     * 
     * @param A int整型 可以连续发射A天
     * @param B int整型 需要连续冷却B天
     * @param M int整型 每天至少需要发射M粒**
     * @return int整型
     */
    int solve(int A, int B, int M) {
        return ((A+B)/A+1)*M;
    }
};

发表于 2020-07-18 00:46:19 回复(0)
  最简单的一种解题思路(一行代码):找到满足n*A>A+B的n,再返回n*M
  int solve(int A, int B, int M) {
        // write code here
        return ((A+B)/A+1)*M;
    }
发表于 2020-06-17 10:48:26 回复(0)
暴力,用int会爆栈,用short可以
循环一个周期即可,每天的**数需要满足M个
int solve(int A, int B, int M) {
        if(A == B) return 3 * M;
        if(A > B) return 2 * M;
        vector<short> taken(A + B + 1, 0);
        taken[A + B] = 1;
        int cnt = 0;
        for(int i = 0; i < A + B; i++) {
            while(taken[i] < M || (taken[i] >= M && taken[i+1] == 0)) {
                cnt++;
                for(int j = i; j < i + A; j++)
                    taken[j] += 1;
            }
        }
        return cnt;
    }


编辑于 2020-05-04 13:19:47 回复(0)
简单的分类讨论
class Solution:
    def solve(self , A , B , M ):
        # write code here
        if (A == B):
            return 3 * M
        if (A > B):
            return 2 * M
        if (A < B):
            return (M * ((B//A)+2) )


发表于 2021-03-28 14:18:53 回复(0)
题目中的连续是指连续的天数吗?那每个系统最多运行A-1天岂不永不过热?示例一中的结果也应该是3个呀.
发表于 2020-07-08 17:59:42 回复(0)

问题信息

难度:
5条回答 3304浏览

热门推荐

通过挑战的用户

查看代码