解题思路:
最最最重要的思路是 蚂蚁碰头时 你可以看做没有碰头穿过去(当然感冒肯定会传染)
注意事项:
一定要考虑第一只蚂蚁是否掉头
最后相加时别忘了第一只
参考代码:
#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 人评分
简单的a+b (C语言代码)浏览:528 |
Tom数 (C++代码)浏览:868 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:575 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:481 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:633 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1215 |
Wu-求圆的面积 (C++代码)浏览:1994 |
关于C语言变量位置的问题浏览:294 |
核桃的数量 (C语言代码)浏览:726 |
敲七 (C++代码)浏览:1119 |