用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
输入导弹依次飞来的高度(雷达给出的高度数据是不大于 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