1158: 防御导弹

来源:互联网 发布:手柄助手映射软件 编辑:程序博客网 时间:2024/05/29 09:27

题目

Description

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

Input

最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)

Output

整数M。表示:这套系统最多能拦截 M 枚导弹.

Sample Input

300 250 275 252 200 138 245
Sample Output

5


代码块

import java.util.Arrays;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner cn = new Scanner(System.in);        int[] a = new int[21];//先定义一个数组        String str = cn.nextLine();//因为,不知道导弹的个数,所以先用字符串输入,再存入,先前定义的数组中        String[] s = str.split(" ");        for (int i = 0; i < s.length; i++)//将输入的数,存入数组中            a[i] = Integer.parseInt(s[i]);        int n = s.length;//先定义,数的个数        int max = 0,k = 1,x = 0,t = 0;//初始化,例子        while (t != k) {//对每次循环的t和k的值进行判断,如果,循环到最后,两者,相等,则所有的循环就结束了,退出循环            int i = 0,counts =0;每次,循环,都是以第一个数开始做头,然后,进行判断            t = k;//每次对,t进行更新            for (int j = k; j < n; j++) {//k的意思,是每次循环第一次前者小于后者的位置,然后,从这个位置进行判断                if (a[i] >= a[j]) {//进行前后者数大小的判断,更新 i 的位置                    counts++;                    i = j;                } else {//如果,小于后者,进行此位置的更新,如果后面还有前者小于后者的位置,不在更新                    x++;                    if (x < 2)                        k = j;                }//如果,执行到最后,也没有找到更新,k的位置,即说明,循环已经结束,此时,t也就等于k            }            if(max<counts) max =counts;//对每次循环的 最大值进行更新        }        System.out.println(max+1);// 加上第一个导弹,输出    }}