原题链接:蓝桥杯历届试题-蚂蚁感冒
解题思路:
写了蛮长时间了,脑子转不过来了。。
两种特殊情况:同方向前面的都是同自己的一个方向,如4,5,6
一般情况有两种,相碰到了两个就反向:
假如一开始是这样的:4 和 -5,用箭头表示为: -> <- ,
相碰了,各自掉头: <- ->
但是我们可以这样理解:
4-> ->
<- <- 5
就相当于穿过去了,也就是说,整体来看,原来是什么方向,你就怎么走,直到你碰到有毒的蚂蚁,
那么它就被毒上了。
注意事项:
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, i, j=0, a[200],b[200],d = 1,flag = 1;
cin >> n;
for(i = 0; i < n; i++)
cin >> a[i];
//两种特殊情况,同方向前面的都是同自己的一个方向,如4,5,6
if(a[0] < 0) //特殊情况1
{
for(i = 0; i < n; i++)
{
if(abs(a[i]) < abs(a[0]) )
{
if(a[i] > 0)
{
flag = 0;break;
}
}
if(!flag) break;
}
}
else //特殊情况2
{
for(i = 0; i < n; i++)
{
if(abs(a[i]) > a[0] )
{
if(a[i] < 0)
{
flag = 0;break;
}
} if(!flag) break;
}
}
if(flag) cout << 1 << endl;
else //一般情况有两种
{
if(a[0] > 0)
{
for(i = 1; i < n; i++)
{ //-1 2 -3 4 *5* 6 -7 8 -9
// 1 2 3 4 *5* 6 7 8 9
if(abs(a[i]) < a[0])
{
if(a[i] > 0) d++;
}
else //if(abs(a[i]) > a[0])
{
if(a[i] < 0) d++;
}
}
}
else {
for(i = 1; i < n; i++)
{
if(abs(a[i]) < abs(a[0]))
{
if(a[i] > 0) d++;
}
else
{
if(a[i] < 0) d++;
}
}
}
cout << d << endl;
}
return 0;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复