当前位置: 代码迷 >> C语言 >> 请问‘防御导弹’问题。。。。
  详细解决方案

请问‘防御导弹’问题。。。。

热度:209   发布时间:2005-09-29 19:17:00.0
请问‘防御导弹’问题。。。。
问题叙述:
    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入:
最多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; } 只写了第一步!看看!第二部很简单了!


----------------解决方案--------------------------------------------------------
第二步直接在程序中添加进去应该可以的吧?
----------------解决方案--------------------------------------------------------
  相关解决方案