求救c语言导弹拦截问题!

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

在网上搜过,但都不对
我自己又做不出来~~~

#include<stdio.h>
#include<string.h>
#define N 21

int max(int mh[],int n) /* 求最多拦截导弹数 */

{
int a[N][N],b[N],i,j,k,len1,s,t;
/* a:各系统可能拦截导弹的高度 b:各系统拦截导弹数 */
/* s:导弹拦截系统数 */
/* len1:可拦截当前导弹的最优系统的编号(从0开始) */
a[0][0]=mh[0]; s=1; b[0]=1;
for (i=1;i<n;i++)
{
len1=0; t=0;
for (j=0;j<s;j++) /* j:系统编号 依次考查每套系统 */
for (k=b[j]-1;k>=0;k-- ) /* 每套系统防御导弹高度数组编号 */
{
if (mh[i]<=a[j][k])
{
if (t<k+1)
{ t=k+1; len1=j; break; }
if (t==k+1)
if (a[len1][t-1]>a[j][k])
{ len1

是不是这样的概念

1 得到一个导弹高度队列

2 对所有导弹高度进行排序,得到一个导弹高度队列
3 将所有相同高度的导弹从队列中剔除,只留下一个,这就是一个系统可以拦截
4 剔除出来的导弹形成一个新的队列, 重复步骤2

反导系统发射的是炮弹,难道是还在秘密研究的反导大炮不成???