Java 导弹拦截系统问题:最小系统数计算

某国为了防御敌国的导弹袭击,开发出了一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。

输入: 导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。

输出: 要拦截所有导弹最小需要配备多少套这种导弹拦截系统。

输入格式: 第一行输入一个整数 n 表示导弹数量 (1 <= n <= 1000) 接下来 n 行,每行输入一个整数,表示导弹的高度。

输出格式: 输出一个整数,表示要拦截所有导弹最小配备的系统数。

示例输入:

5
3
5
2
6
4

示例输出:

2

思路: 从前往后遍历导弹高度,用一个变量记录当前拥有的导弹拦截系统数,如果当前导弹高度超过前一枚导弹高度,则需要增加一个导弹拦截系统。最后输出所需的导弹拦截系统数即可。

代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] heights = new int[n];
        for (int i = 0; i < n; i++) {
            heights[i] = scanner.nextInt();
        }
        int k = 1; // 初始化为1,因为第一枚导弹可以拦截到
        int max = heights[0]; // 记录当前最高的导弹高度
        for (int i = 1; i < n; i++) {
            if (heights[i] > max) { // 当前导弹高度超过前一枚导弹高度,需要增加导弹拦截系统
                k++;
            }
            max = Math.max(max, heights[i]); // 更新当前最高的导弹高度
        }
        System.out.println(k);
    }
}

代码说明:

  1. 首先读取输入的导弹数量 n 和每个导弹的高度。
  2. 初始化导弹拦截系统数量 k 为 1,因为第一枚导弹可以被拦截到。
  3. 初始化当前最高的导弹高度 max 为 heights[0]。
  4. 从第二个导弹开始遍历,如果当前导弹高度大于 max,则需要增加一个导弹拦截系统,并将 k 加 1。
  5. 每次遍历完一个导弹后,将 max 更新为当前导弹高度和之前 max 的较大值。
  6. 最后输出 k 即可。
Java 导弹拦截系统问题:最小系统数计算

原文地址: https://www.cveoy.top/t/topic/obbg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录