原题链接:蓝桥杯历届试题-蚂蚁感冒
黑色代表感冒的蚂蚁,红色代表会被感冒的蚂蚁,绿色代表不会被感冒的蚂蚁

在上面这种情况下:黑色的蚂蚁方向向右,它右边与它方向相反的蚂蚁都会被感染(记作cou1),被感染的蚂蚁反向(也就相当于一个向左,一个向右,可以看成按原方向走),被感染的蚂蚁会感染与它方向相反的蚂蚁(记作cou2)
则当cou1>0时:
被感染的蚂蚁总数为:1+cou1+cou2
当cou1=0时;
被感染的蚂蚁总数为:1
cou1=0为下面这种情况,在它的右边没有与之方向相反的蚂蚁


在上面这种情况下,感冒蚂蚁的方向像左,在感冒蚂蚁左边并且与它方向相反的蚂蚁都会被感染(记作cou1),被感染的蚂蚁会去感染在黑色蚂蚁右边并且方向与被感染蚂蚁方向相反的蚂蚁(记作cou2)
则当cou1>0时:
被感染的蚂蚁总数为:1+cou1+cou2
当cou1=0时;
被感染的蚂蚁总数为:1
cou1=0为下面这种情况,在它的左边没有与之方向相反的蚂蚁

#include<stdio.h>
#include <math.h>
int a[101],cou1=0,cou2=0;
int main()
{ int n,i,s=1;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
if(a[0]>=0) //当蚂蚁的方向向右时
{
for(i=1;i<n;i++) //在感冒蚂蚁右边的与它方向相反的会被感染
if(a[i]<0&&abs(a[i])>a[0])
cou1++;
for(i=1;i<n;i++) //被感染的蚂蚁会去感染,第一个感冒蚂蚁左边并且与它方向相反的蚂蚁
if(a[i]>=0&&a[i]<a[0])
cou2++;
}
else {//当蚂蚁的方向向左时
for(i=1;i<n;i++) //在感冒蚂蚁左边的与它方向相反的会被感染
if(a[i]<abs(a[0])&&a[i]>0)
cou1++;
for(i=1;i<n;i++)
if(abs(a[i])>abs(a[0])&&a[i]<0)//被感染的蚂蚁会去感染,第一个感冒蚂蚁左边并且与它方向相反的蚂蚁
cou2++;
}
if(a[0]>0&&cou1>0)//如果第一个感冒蚂蚁能够感染蚂蚁,则加上被感染的蚂蚁和被感染蚂蚁可以感染的蚂蚁数量
s+=cou1+cou2;
if(a[0]<0&&cou1>0)
s+=cou1+cou2;
printf("%d",s);
return 0;
}0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复