我理解是下面这样:
列1:
输入:300 250 275 252 200 138 245 -1
(程序是以 -1 结束)
显示:
5
300 275 252 200 138
(拦截5 ,显示拦截哪5个)
·
列2:
输入:100 260 280 260 210 166 199 -1
4
280 260 210 166
(拦截4 ,显示拦截哪4个)
程序代码:
#include<stdio.h>
#include<malloc.h>
int main(void)
{
int i,j,k,k1,x,n,m,max_len=0,max,a_len=0;
int y,**a,*p;
while(1)
{
scanf("%d",&y);
if(y==-1)break;
p=(int *)malloc(sizeof(int));
*p=y;
a[a_len]=p; /* a[a_len]乱指一个地址了,我这错了。要更正只能在前面加代码分配空间,输入总的导弹数才行 */
a_len++;
}
p=(int *)malloc(sizeof(int)*a_len);
for(k=0;k<a_len-2;k++)
{
x=*a[k];
n=1;
for(i=k+1;i<a_len-1;i++)
{
if(x>*a[i])
{
m=*a[i];
n=2;
for(j=i+1;j<a_len;j++)
{
if(m>*a[j])
{
n++;
m=*a[j];
}
}
}
if(max_len<n)
{
max_len=n;
m=p[0]=max=*a[k];
for(j=i,k1=1;j<a_len;j++)
{
if(m>*a[j])
{
p[k1]=*a[j];
m=*a[j];
k1++;
}
}
if(k<a_len)
p[k1]=-1;
}
if((a_len-i-1)<n)break;
}
if(a_len-2-k<max_len)break;
}
printf("%d\n",max_len);
for(i=0;i<a_len;i++)
{
if(p[i]==-1)break;
printf("%d ",p[i]);
}
printf("\n\n");
getch();
return 0;
}
[
本帖最后由 UserYuH 于 2009-10-5 00:57 编辑 ]