历届试题 蚂蚁感冒
2017-04-06 17:17
239 查看
历届试题 蚂蚁感冒
时间限制:1.0s 内存限制:256.0MB
问题描述
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入格式
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
输出格式
要求输出1个整数,表示最后感冒蚂蚁的数目。
样例输入
3
5 -2 8
样例输出
1
样例输入
5
-10 8 -20 12 25
样例输出
3
解题思路:看了好久过了两组数据,百度看了一下其他的人的思路:
原来碰面的蚂蚁向反方向走等价于直接穿行过去,这样就比较好做了
首先对数据进行绝对值排序
感冒蚂蚁左爬的话:
如果它的左面有向右爬的蚂蚁,那么总感冒的蚂蚁=左面向右爬+右向左爬,
如果它的左面没有向右爬的蚂蚁,那么右面向左爬的不会感冒。。
同理,右爬道理一样。
还有注意的一点是蓝桥杯题目并没有说多组数据,没用多组测试数据我在官网提交0分。。。。
。。。。。。后面改了一下。。
我的代码:
时间限制:1.0s 内存限制:256.0MB
问题描述
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入格式
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
输出格式
要求输出1个整数,表示最后感冒蚂蚁的数目。
样例输入
3
5 -2 8
样例输出
1
样例输入
5
-10 8 -20 12 25
样例输出
3
解题思路:看了好久过了两组数据,百度看了一下其他的人的思路:
原来碰面的蚂蚁向反方向走等价于直接穿行过去,这样就比较好做了
首先对数据进行绝对值排序
感冒蚂蚁左爬的话:
如果它的左面有向右爬的蚂蚁,那么总感冒的蚂蚁=左面向右爬+右向左爬,
如果它的左面没有向右爬的蚂蚁,那么右面向左爬的不会感冒。。
同理,右爬道理一样。
还有注意的一点是蓝桥杯题目并没有说多组数据,没用多组测试数据我在官网提交0分。。。。
。。。。。。后面改了一下。。
我的代码:
// #include<iostream> #include<math.h> #include<memory.h> #include<algorithm> using namespace std; bool cmp(int x,int y) { return abs(x)<abs(y); } int main() { int n; while(cin>>n) { int a[100],i,temp,t; for(i=0;i<n;i++) cin>>a[i]; temp=a[0];//感冒蚂蚁 sort(a,a+n,cmp); for(i=0;i<n;i++)//排序之后 感冒蚂蚁所在的weiz { if(a[i]==temp) { t=i; break; } } if(temp>0)//右爬=右面向左爬的+右面向左爬的(前提是有右面向左爬的蚂蚁) { int s1=0,s2=0,sum=0; for(i=t+1;i<n;i++) { if(a[i]<0) s1++;//右面向左爬的 } for(i=0;i<t;i++) { if(a[i]>0) s2++;//右面向左爬的 } if(s1>0) sum=s1+s2+1; else sum=1; cout<<sum<<endl; } else//左爬=左面向右爬的+右爬向左爬的 { int s1=0,s2=0,sum=0; for(i=0;i<t;i++) { if(a[i]>0) s1++;//左面向右爬的 } for(i=t+1;i<n;i++) { if(a[i]<0) s2++;//右爬向左爬的 } if(s1>0) sum=s1+s2+1; else sum=1; cout<<sum<<endl; } } return 0; }
相关文章推荐