导d拦截机器的运行方式:
首先防空导d需要对目标进行确认,比如说雷达在天空中发现一架飞机。那么这架飞机是哪个国家的,这架飞机是战斗机还是客机,这架飞机是来干什么的。
在防空导d弄明白了目标之后,确认是敌人的目标,而且可以进行开火射击。防空导d的雷达会测算出目标的射击诸元。其实就是确定目标的方位角度,高度,所处的位置,前进的方向,前进的速度,是否存在机动动作等信息。
有了这些信息之后,将其属于导d,然后导d的火控雷达对准目标的来袭方位提前准备。而以上的这一切都是在短短的十几秒内确定的。至于为什么报告上级,是因为各国军队都有自己的交战规则,在符合交战规则的情况下,是并不需要请示就可以加入战斗。
在确定好所有的数据之后,三枚防空导d会腾空而起飞向目标。关于为什么要发射三枚,唯一的原因就是三枚可以提升命中的精确度。目前各国的发射都是遵循着这样的方式进行发射。
在接近目标之后,防空导d上自带的雷达启动,开始追踪目标,然后在近炸引信的帮助下,在目标周围爆炸,利用破片对来袭的飞机进行杀伤。
导d拦截的程序:
1、预警卫星、前沿部署雷达等首先发现导d尾焰红外信号,然后向战区联合地面站及司令部等战斗指挥部门发出警报并计算来袭导d相关数据;
2、战斗管理系统将接收到的数据进行融合与处理,初步判断导d的飞行方向、发射点与落点;
3、战斗指挥部将信息传达到相应方向的地基和海基X波段雷达以及在附近海域执勤的“宙斯盾”战舰;
4、各地、海基雷达接力探测敌方d头,绘制出该d头在三维空间的飞行轨迹,并将这些导d信息传送给地基、海基、天基等各级拦截系统弄进行导d拦截;
5、发射拦截d,拦截d飞向目标。待到靠近目标时,依靠d载传感器完成对目标的确定,撞击目标,完成拦截。
举个空空导d拦截目标的例子假设是主动雷达制导的
首先用载机雷达搜索目标,然后转入窄波段精确解算目标位置,锁定目标,发射导d。
载机用雷达连续照射目标,导d接受反射回来的信号,继续向目标所在位置前进
进入最后20公里时,导d上的雷达开机,自主搜索目标,根据目标位置调整舵机,一头撞上去。击毁对方
for (i=n-1i>=1i--){
for (j=nj>=i+1j--)
{
if (a[i]>a[j] &&l[j]+1>l[i])
{
l[i]=l[j]+1
}//printf("%d %d\n",i,j)}
max=0,ss=1//for(i=1i<=ni++) printf("%d ",l[i])printf("\n")
for (i=1i<ni++)
{
在这里有死循环,j永远小于i
---------------------------------------------------
/*
VC6.0编译运行成功
*/
#include
#include
/*
描述 Description
某国为了防御敌国的导d袭击,研发出一种导d拦截系统。但是这种导d拦截系统有一个缺陷:虽然它的第一发炮d能够到达任意的高度,但是以后每一发炮d都不能高于前一发的高度。某天,雷达捕捉到敌国的导d来袭。由于该系统还在试验阶段,所以只有一套系统,因此有可能不能拦截所有的导d。
输入格式 Input Format
输入数据只有一行,该行包含若干个数据,之间用半角逗号隔开,表示导d依次飞来的高度(导d最多有 20 枚,其高度为不大于 30000 的正整数)。
输出格式 Output Format
输出数据只有一行,该行包含两个数据,之间用半角逗号隔开。第一个数据表示这套系统最多能拦截的导d数;第二个数据表示若要拦截所有导d至少要再添加多少套这样的系统。
样例输入 Sample Input
389,207,155,300,299,170,158,65
样例输出 Sample Output
6,1
其它测试输入样例
389,207,155,300,299,170,65,158
5,3,1,4,3,2,1,0
1,2,3,4,5,6,2
*/
/*
分析,问题是动态规划与Dilworth定理题目
http://www.gnocuil.cn/blog/article.asp?id=16
*/
int main()
{
char s[105]
int i, j, n, a[21], l[21], sign[21], max = 0, min = 0
scanf("%s", s)
//min 代表最长递增序列长度 max 代表最短递减序列长度
for (i = 0, j = 0, a[0] = l[0] = sign[0] = 0i <strlen(s)i++)
{
if (s[i] == ',')
{
a[++j] = 0
sign[j] = 1
l[j] = 1
}
else
{
a[j] = a[j] * 10 + (s[i] - '0')
}
}
n = j
for (i = n - 1i >= 0i--)
{
int maxflag = 0, minflag = 0
j = i + 1
while(j <= n)
{
if(a[i] >a[j])
{
if(l[i] <l[j])
{
l[i] = l[j]
}
maxflag = 1
}
else if(a[i] <a[j])
{
if(sign[i] <sign[j])
{
sign[i] = sign[j]
}
minflag = 1
}
j++
}
if(maxflag)
l[i]++
if(minflag)
sign[i]++
if(max <l[i])
{
max = l[i]
}
if(min <sign[i])
{
min = sign[i]
}
}
printf("%d,%d\n", max, min - 1)
return (0)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)