请问‘防御导弹’问题。。。。
问题叙述:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入:
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)
输出:两个整数M和N。表示:这套系统最多能拦截 M 枚导弹,如果要拦截所有导弹最少要配备 N 套这种导弹系统。
举例:
输入 300 250 275 252 200 138 245
输出 5 2
欢迎高手们帮忙解答!不胜感激!
下面是我用c写的‘防御导弹’问题,但是总是wrong answer?
不明白啊。。。
#include<stdio.h>
#include<string.h>
#define Max 30001
int a[Max],b[Max];
int main()
{ int h,i,max,max2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
while(scanf("%d",&h)!=EOF)
{ max=max2=0;
for(i=h;i<=Max-1;i++)
if(a[i]>max)
max=a[i];
a[h]=max+1;
for(i=h-1;i>=0;i--)
if(b[i]>max2)
max2=b[i];
b[h]=max2+1;
}
max=max2=0;
for(i=0;i<=Max-1;i++)
{ if(a[i]>max) max=a[i];
if(b[i]>max2) max2=b[i];
}
printf("%d %d\n",max,max2);
}
搞了半天了 ,还是弄不出结果来 希望高手能帮我改正下这题目的错误。。给我下正确的程序做参考
----------------解决方案--------------------------------------------------------
main()
{int a[20],i,x=1,y=1,j,n;
scanf("%d",&n); 输入导弹得个数
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1,j=a[0];i<n;i++)
if(a[i]>j)
y++;
else
x++;
j=a[i];
}
printf("%d %d",x,y);
}
别想得太多了
----------------解决方案--------------------------------------------------------
这样写好象不能达到题目的要求吧? 导弹每次都要递减的!
----------------解决方案--------------------------------------------------------
要用树啊!!!
----------------解决方案--------------------------------------------------------
#include "Stdio.h" #include "Conio.h"
#define T 30001 #define B 0 int main(void) { int array[20],len; int value,i,j; printf("input the total number(<20)"); scanf("%d",&len); for(i=0;i<len;i++) array[i]=0; array[0]=T; for(j=1;j<=len;j++) {printf("enter the %dth num",j); scanf("%d",&value); for(i=0;i<len;i++) {if(array[i]!=0&&array[i]!=value) if(array[i]>value&&array[i+1]<value) array[i+1]=value; } } for(i=1;i<len;i++) if(array[i]!=0&&array[i+1]==0)printf("%d",i);
getch(); return 0; } 只写了第一步!看看!第二部很简单了!
----------------解决方案--------------------------------------------------------
第二步直接在程序中添加进去应该可以的吧?
----------------解决方案--------------------------------------------------------