原题链接:蓝桥杯历届试题-蚂蚁感冒
解题思路:
写了蛮长时间了,脑子转不过来了。。
两种特殊情况:同方向前面的都是同自己的一个方向,如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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复