用C语言实现拦截导弹问题或给出算法

来源:百度知道 编辑:UC知道 时间:2024/09/24 05:33:40
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数),计算这套系统最多能拦截多少导弹,并依次输出被拦截的导弹飞来时候的高度。

样例:

INPUT

389 207 155 300 299 170 158 65

OUTPUT

6 (最多能拦截的导弹数)

389 300 299 170 158 65

给,已经在VC上编译运行确认:
#include<conio.h>
#include<stdio.h>

#include<math.h>
#include<stdlib.h>

#define N 50

int func(int*a,int n,long sta)
{
int k,func=0;
long high=999999;
char b;
if(sta>0)
for(k=0;k<n;k++)
{ b=sta%2;sta/=2;
if(!b)continue;
if(a[k]>=high)break;
func++;
high=a[k];
}
return func;
}

int main()
{
int num,h,i=0,hit=0,HIT=0,temp=0;
int high[N]={NULL},result[N]={NULL};
long st1,st2,sta,STA;
char ch,b;

while((ch=getchar())!='\n')
{
if(ch!=' ') temp=temp*10+(ch-'0');
else
{
high[i++]=temp;
temp=0;
}
}
high[i++]=temp;

num=i;
st1=0;
st2=(long)pow(2,num)-1;

for(sta=st1;sta<=st2;sta++)
{
hit=func(hig