题目
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);// 加上第一个导弹,输出
}
}