#include<stdio.h>
struct fei
{
int h;
int v;
}z[3000];//定义了结构体,辅助循环
int main()
{
int i,j,n;
while(scanf("%d",&n)!=EOF&&n)
{
int s=0;
for(i=0;i<n;i++)
{
scanf("%d",&z[i].h);//输入n个数,z[].h代表相应的导弹高度
z[i].v=0;//令相应的z[].v都为零
}
for(i=0;i<n;i++)
{
if(z[i].v==1)//放掉前边已经比较完的,由后面得到的1
continue;
z[i].v=1;//去掉比较完的后,第一个z[].v为1
j=i+1;//后一个高度与前一个对比,后面的z[].v仍是0
while(j<n)
{
if(z[j].v==0&&z[j].h<=z[i].h)//从z[0].h比到最后
{
z[j].v=1;//控制if
i=j;//确保i始终比j小1
j=i+1;
}
else
j++;//j一直增加,后一个高度与前一个对比,后面的z[].v仍是0
}
s++;
i=0;//不能少
}
printf("%d\n",s);
}
return 0;
}
上面是用结构体作,感觉挺费时的,但ac了
下面不用结构体,感觉挺完美的,可超时了!
#include<stdio.h>
int main()
{
int i,n,m;
int s,z[1007],max,count;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
return 0;
for(i=0;i<n;i++)
scanf("%d",&z[i]);
s=0;
count=n;
while(count)//所谓的“贪心算法”是指在对问题求解时,
//总是做出在当前看来是最好的选择。也就是说,不从整体上加以考虑,
//它所做的仅仅是在某种意义上的局部最优解。
{
s++;
max=5000;
for(i=0;i<n;i++)
{
if(z[i]>0&&z[i]<max)
{
max=z[i];
z[i]=-1;
count--;
}
}
}
printf("%d\n",s);
}
return 0;
}