题目描述
n只蚂蚁,其中一直感冒,两只蚂蚁相撞时会将感冒传给对方,并各自改变方向,求有多少只感冒的蚂蚁
输入格式
第一行输入一个整数 n, 表示蚂蚁的总数。
接着的一行是 n 个用空格分开的整数 Xi, Xi 的绝对值表示蚂蚁离开杆子左边端点的距离。
正值表示头朝右,负值表示头朝左,数据中不会出现 0 值,也不会出现两只蚂蚁占用同一位置。
其中,第一个数据代表的蚂蚁感冒了。
输出格式
输出1个整数,表示最后感冒蚂蚁的数目。
数据范围
1<n<50,
0<|Xi|<100
样例
输入样例1:
3
5 -2 8
输出样例1:
1
输入样例2:
5
-10 8 -20 12 25
输出样例2:
3
一个思维题:两只蚂蚁相撞再各自返回可以看成两只蚂蚁虽然相撞但方向未改变,但要考虑是否感染
上取整:1)ceil()
2)(int)(a+b-1)/b---->对a/b上取整(原理略);
C++ 代码
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=55;
int n;
int x[N];
//两只蚂蚁相撞再各自返回可以看成两只蚂蚁虽然相撞但方向未改变,但要考虑是否感染
int main(){
cin>>n;
for(int i=0;i<n;i++)cin>>x[i];
int left=0,right=0;
for(int i=1;i<n;i++){//分别表示左边向右走,和右边向左走的蚂蚁数量
if(abs(x[i])<abs(x[0])&&x[i]>0)left++;
if(abs(x[i])>abs(x[0])&&x[i]<0)right++;
}
if(x[0]>0&&right==0||x[0]<0&&left==0)cout<<1<<endl;
else cout<<right+left+1<<endl;
return 0;
}