解题思路:
最最最重要的思路是 蚂蚁碰头时 你可以看做没有碰头穿过去(当然感冒肯定会传染)
注意事项:
一定要考虑第一只蚂蚁是否掉头
最后相加时别忘了第一只
参考代码:
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct
{
int dis;
int cold;//1 haved cold 0 no
}ant;
void arrange(ant ants[],int n);
int find(ant ants[],int n);
int main()
{
int n,i;
ant ants[50];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&ants[i].dis);
ants[i].cold=0;
}
ants[0].cold=1;
arrange(ants,n);
printf("%d",find(ants,n));
return 0;
}
void arrange(ant ants[],int n)
{
int i,j,k;
ant temp;
for(i=0;i<n;i++)
{
k=i;
for(j=i;j<n;j++)
{
if(fabs(ants[j].dis)<fabs(ants[k].dis))
k=j;
}
if(k!=i)
{
temp=ants[i];
ants[i]=ants[k];
ants[k]=temp;
}
}
}
int find(ant ants[],int n)
{
int i,k,cold=-1;
int left_zuo=0,left_you=0; //第一只的左边蚂蚁爬的方向
int right_zuo=0,right_you=0;//第一只的右边蚂蚁爬的方向
for(i=0;i<n;i++)
{
if(ants[i].cold==1)
{
cold=i;
}
else if(cold==-1)
{
if(ants[i].dis<0)
left_zuo++;
else
left_you++;
}
else
{
if(ants[i].dis<0)
right_zuo++;
else
right_you++;
}
}
if(ants[cold].dis<0)
{
if(left_you==0)
return 1;
else
{
return left_you+right_zuo+1;
}
}
else
{
if(right_zuo==0)
return 1;
else
{
return left_you+right_zuo+1;
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复