解题思路:
写了蛮长时间了,脑子转不过来了。。
两种特殊情况:同方向前面的都是同自己的一个方向,如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分
3 人评分
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:722 |
C二级辅导-统计字符 (C语言代码)浏览:541 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:655 |
字符串输入输出函数 (C++代码)(都当成字符串吧hhhhhhhh)浏览:493 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:472 |
1113题解浏览:791 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:707 |
Tom数 (C语言代码)浏览:555 |
GC的苦恼 (C语言代码)浏览:621 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:617 |