目录
题目详细:编辑
题目思路:
两种情况:
代码详解:
题目详细:
题目思路:
这个题目的关键在于对蚂蚁相遇
的时候情况的看待
两个蚂蚁相遇时候的情况
我们可以看作
他们相互穿过了彼此
假设相遇的蚂蚁其中的一只有感冒的话
相遇后就假设他们两个都变成感冒了
所以对于蚂蚁我们就只需要考虑
两种情况:
1.第一只感冒蚂蚁方向朝向的方向没有与他相反朝向的蚂蚁
这种情况,蚂蚁不会和任意一只蚂蚁相会遇见,故最终感冒的蚂蚁数目为1
2.第一只感冒蚂蚁方向朝向的方向有与他相反朝向的蚂蚁
那么这个时候就只需要考虑以第一只感冒蚂蚁为中心
两边朝向这只蚂蚁的数目就是会感冒的蚂蚁数目
具体情况大家可以通过上面提到的方法去模拟一下。
代码详解:
#include<iostream>
#include<cmath>
using namespace std;
const int N=106;
int a[N];
int b[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]>0) b[i]=1;
else b[i]=-1;
}
int index=abs(a[1]);
int sum=1;
int flag=0;
for(int i=2;i<=n;i++){
if(1==b[1]&&b[i]==-1&&index<abs(a[i])) flag=1;
if(-1==b[1]&&b[i]==1&&index>a[i]) flag=1;
}
if(1==flag){
for(int i=2;i<=n;i++){
if(abs(a[i])>index&&-1==b[i]) sum++;
if(abs(a[i])<index&&1==b[i]) sum++;
}
}else{
cout<<1;
return 0;
}
cout<<sum;
return 0;
}
PS:这种脑筋急转弯的题目还是要多练一下,防止脑袋生锈(doge)