防御导弹
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截 系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试 用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)
输出
整数M。表示:这套系统最多能拦截 M 枚导弹.
样例输入
300 250 275 252 200 138 245
样例输出
5
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int R=0;//保存结果,声明为全局变量
public static int aa(int[] data,int i,int min,int N) {
for(;i<data.length;i++) {//从数组当前的值开始遍历
if(data[i]<=min) {//假如当前值小于min便有两种选着(1、拦下了2、不拦下来)否者i++遍历下一个元素
int num1=aa(data, i+1, data[i], N+1);//拦截当前导弹 min改为当前值,N自动加一(递归)
int num2=aa(data, i+1, min, N);//不拦截当前导弹,min还是min(递归)
if(num1>num2) {//在遍历的一轮结束后,将大值付给N
N=num1;
}else {
N=num2;
}
}
}
R=R>N?R:N;//将没一轮的比较后的大值赋给R,即R保存最大值
N=0;//每一轮结束后N归零,从新开始下一轮
return N;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String string1=scanner.nextLine();
String[] strings=string1.split(" ");//字符串转换为字符串数组
int[] data=new int[strings.length];
for(int i=0;i<strings.length;i++) {
data[i]=Integer.parseInt(strings[i]);//将字符串数组转换为整数数字
}
int N=0;//在每一趟搜索时保存的拦截炮弹数
N=aa(data,0,30000,N);//题目要去《=30000,所以min的初始值设为30000
System.out.println(R);
}
}