解题思路:
写了蛮长时间了,脑子转不过来了。。
两种特殊情况:同方向前面的都是同自己的一个方向,如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语言代码)浏览:1748 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:770 |
数列排序 (C语言代码)浏览:858 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:644 |
十->二进制转换 (C语言代码)浏览:1330 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:827 |
C语言考试练习题_排列 (C语言代码)浏览:767 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:910 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:564 |
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:836 |