防御导弹
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截 系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试 用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入
最多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); } }