据说这就是贪心算法!

#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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值