HDU1257,请大牛们帮我找下错误,总是WA
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1257#include<stdio.h>intmain(){intn;in...
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1257
#include <stdio.h>
int main()
{
int n;
int i,j,k;
int hight[100000];
int s,a,b,v=0,u=0;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&hight[i]);
}
b=1;
k=0;
for(s=1;;s++) //s表示系统数
{
a=hight[b-1]; //再开一个系统
hight[b-1]=0; //拦截住上个系统不能拦截的导弹
k++;
for(i=b;i<n;i++)
{
if(a>=hight[i]&&hight[i]!=0)
{
a=hight[i];
hight[i]=0; //归0表示导弹被拦截下。
k++; //拦截一枚加一个
}
if(u==0)
if(a<hight[i]&&hight[i]!=0) //找到此系统不能打下的高度
{
b=i+1;
u=1;
}
}
if(k==n) //直到导弹拦截数与敌方发射数相同
break;
}
printf("%d\n",s);
}
return 0;
} 展开
http://acm.hdu.edu.cn/showproblem.php?pid=1257
#include <stdio.h>
int main()
{
int n;
int i,j,k;
int hight[100000];
int s,a,b,v=0,u=0;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&hight[i]);
}
b=1;
k=0;
for(s=1;;s++) //s表示系统数
{
a=hight[b-1]; //再开一个系统
hight[b-1]=0; //拦截住上个系统不能拦截的导弹
k++;
for(i=b;i<n;i++)
{
if(a>=hight[i]&&hight[i]!=0)
{
a=hight[i];
hight[i]=0; //归0表示导弹被拦截下。
k++; //拦截一枚加一个
}
if(u==0)
if(a<hight[i]&&hight[i]!=0) //找到此系统不能打下的高度
{
b=i+1;
u=1;
}
}
if(k==n) //直到导弹拦截数与敌方发射数相同
break;
}
printf("%d\n",s);
}
return 0;
} 展开
1个回答
展开全部
没看你的
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[100]={30000},i=0,j,m;//高度不大于30000,就把a[0]赋值为最大,i+1为系统数
while(n--)
{
scanf("%d",&m);
for(j=0;j<=i;j++)//一个个比较,看现在有没有拦截系统能拦下来
{
if(m<=a[j])
{
a[j]=m;//因为高度是从小到大排的,找到最小能拦下的那个系统,并把它赋为当前值
break;
}
}
if(j>i) a[++i]=m;//如果没有,就开多一个拦截系统
}
printf("%d\n",i+1);
}
return 0;
}
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[100]={30000},i=0,j,m;//高度不大于30000,就把a[0]赋值为最大,i+1为系统数
while(n--)
{
scanf("%d",&m);
for(j=0;j<=i;j++)//一个个比较,看现在有没有拦截系统能拦下来
{
if(m<=a[j])
{
a[j]=m;//因为高度是从小到大排的,找到最小能拦下的那个系统,并把它赋为当前值
break;
}
}
if(j>i) a[++i]=m;//如果没有,就开多一个拦截系统
}
printf("%d\n",i+1);
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询