贪玩蓝月帮会秘境:程序+导弹拦截问题

来源:百度文库 编辑:高校问答 时间:2024/05/06 04:35:46

Problem
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

Input
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)

Output
整数M。表示:这套系统最多能拦截 M 枚导弹。

程序清单(in Pascal):

var
h:array [1..2,1..20] of integer;
hn:integer;

procedure init;
var i:integer;
begin
fillchar(h,sizeof(h),0);
hn:=0;
repeat
inc(hn);
read(h[1,hn])
until eof;
end;

procedure doit;
var i,j,n:integer;
begin
for i:=1 to 20 do h[2,i]:=1;
n:=1;
for i:=hn-1 downto 1 do
begin
for j:=i+1 to hn do
if (h[1,i]>=h[1,j]) and (h[2,i]<h[2,j]+1)
then h[2,i]:=h[2,j]+1;
if n<h[2,i] then n:=h[2,i];
end;
writeln(n);
end;

begin
init;
doit;
end.

如果是军事问题的话,能给你一个计算公式,具体的程式要你自己编写。
导弹拦截笼统的分为3块:
发现+计算+拦截

发现的条件取决于飞弹的飞行高度和雷达的高度以及扫描范围,同时还有雷达的反映时间。
计算就要靠分析程序了,具体的分析参数不能详细说名,但首先要计算的是攻击导弹的速度和拦截导弹的速度差距,然后是攻击导弹的飞行轨迹和拦截导弹的飞行轨迹,两条轨迹的交叉点,
拦截首先要考虑的是用什么拦截,一般的导弹拦截同样是用导弹拦截,但是要考虑的是拦截导弹的速度,如果速度相差不多的话,成功的可能性会高点,同时还要考虑的是攻击导弹是否会自行躲避,如果可以自行躲避的话,对飞行轨迹进行计算就相对会吃力一些。
我能说的就这么多了。

哥哥你真无聊
难道要你去拦截导弹??