1.题目描述

2.输入输出

3.输入输出样例

4.解题思路
首先对于本题,有一个更高层的抽象:题目中说到两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。其实这就等同于两只蚂蚁互相路过继续沿杆方向前进,而得了感冒的蚂蚁,则会将感冒传染给从它身边路过的蚂蚁。

接下来就是要分不同的情况去讨论了,首先是最容易理解的两种情况:

黑色表示初始就感冒的蚂蚁,红色表示本次实验中不会感冒的蚂蚁,蓝色表示是在本次实验中被传染感冒的蚂蚁。(但是想想看,还有两种特殊情况)

特殊情况是这样的:

在这种情况中,没有一只蚂蚁会与初始感冒的蚂蚁相向而行,要么背道而驰,要么同向前进。那么此时除了初始感冒的蚂蚁以外,就不会有任一一只蚂蚁感冒。
我的代码如下:

#include<bits/stdc++.h>
using namespace std;
#define maxn 55
int a[maxn];
int cold=1;
int flag=0;
int main() {memset(a,0,sizeof a);int n;cin>>n;for(int i=0;i<n;i++){//数据输入 cin>>a[i];}if(a[0]>0){for(int k=1;k<n;k++){//该循环是为了遍历每一只蚂蚁的状态,如果出现了相向而行的状态,则将flag置为1 if(a[k]<0 && abs(a[k])>abs(a[0]))flag=1;}for(int i=1;i<n;i++){if(a[i]>0 && abs(a[i])<a[0]) cold++;//该情况下,只要相向而行,感冒数+1 else if(a[i]<0 && abs(a[i])>a[0] && flag) cold++;//此情况下,感冒的蚂蚁是被后续感冒的蚂蚁影响的 }}if(a[0]<0){for(int k=1;k<n;k++){//同理, 该循环是为了遍历每一只蚂蚁的状态,如果出现了相向而行的状态,则将flag置为1if(a[k]>0 && abs(a[k])<abs(a[0]))flag=1;}for(int i=1;i<n;i++){if(a[i]>0 && abs(a[i])<abs(a[0])) cold++;//该情况下,只要相向而行,感冒数+1else if(a[i]<0 && abs(a[i])>abs(a[0]) && flag) cold++;//此情况下,感冒的蚂蚁是被后续感冒的蚂蚁影响的 }}cout<<cold;return 0;}

从网上找来一个优化的代码,更加简洁,思路更清晰,值得学习

#include<stdio.h>int abss(int s)//取绝对值 { if(s<0)return -s;else return s;}
int  main()
{int qans=0,hans=0,n,i,gm,s;scanf("%d",&n); scanf("%d",&gm);//gm 首个感冒蚂蚁 位值 for(i=1;i<n;i++){scanf("%d",&s);if(abss(gm)<abss(s)&&s<0)hans++;//当在首个蚂蚁右侧并且反向 必感冒 if(abss(gm)>abss(s)&&s>0)qans++;//当在首个蚂蚁左侧并且正向 必感冒 }if(gm>0&&hans!=0||gm<0&&qans!=0)printf("%d",qans+hans+1);else printf("1");//当首个感冒蚂蚁方向为正时 在首个蚂蚁右侧并且反向 为 0 或
return 0; //当首个感冒蚂蚁方向为负时 在首个蚂蚁左侧并且反向 为 0 则不会被感冒除首个感冒
}

蓝桥杯历届试题——蚂蚁感冒(模拟)相关推荐

  1. [蓝桥杯][历届试题]蚂蚁感冒(模拟)

    题目描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂 ...

  2. [蓝桥杯][历届试题]蚂蚁感冒(模拟全过程)

    在线测试连接 ** 题目描述 ** 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬 ...

  3. 蓝桥杯历届试题-蚂蚁感冒

    题目描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂 ...

  4. Java实现 蓝桥杯 历届试题 蚂蚁感冒

    问题描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂 ...

  5. [蓝桥杯][历届试题]蚂蚁感冒

    http://www.dotcpp.com/oj/problem1454.html 题目描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1 ...

  6. 蓝桥杯历届试题代码参考

    蓝桥杯历届试题代码参考 历届试题 核桃的数量 打印十字图 带分数 剪格子 错误票据 翻硬币 连号区间数 买不到的数目 大臣的旅费 幸运数 横向打印二叉树 危险系数 网络寻路 高僧斗法 格子刷油漆 农场 ...

  7. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)

    问题 1435: [蓝桥杯][历届试题]国王的烦恼 时间限制: 1Sec 内存限制: 128MB 提交: 802 解决: 213 题目描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了 ...

  8. 蓝桥杯 - 历届试题 - 日期问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_33531813/article/details/79516258 </div>&l ...

  9. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

最新文章

  1. 动手扩充FreeTextBox的功能
  2. eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
  3. c语言合法的数据类型关键字有哪些,C语言提供的合法的数据类型关键字是_________....
  4. VTK:几何对象之Plane
  5. linux 修改消息队列大小
  6. cmd 找到8080对应进程_多进程概括
  7. Java PipedInputStream available()方法与示例
  8. 同源策略——浏览器安全卫士
  9. vfp体积计算机程序,浙江省计算机2级VFP程序调试真题集.doc
  10. 【实践】一站式数据开发平台在有赞的最佳实践.pdf(附下载链接)
  11. endnote X7使用方法
  12. 在python中用os模块实现批量移动文件
  13. 产品经理 项目管理
  14. 地铁刷手机 android版,北京地铁全线支持刷安卓手机乘车 附攻略!
  15. 代理服务器的常用端口有哪些?
  16. 义冢oj P5033打气球
  17. Seaweed-fs
  18. zabbix报警方式,邮件报警和微信报警。
  19. Maya粒子特效制作(二)
  20. KEIL软件错误代码及错误信息

热门文章

  1. 如何创建 makefile文件
  2. 谷歌浏览器 跨域访问 设置
  3. python窗口制作_利用Python制作属于自己的微信小客服
  4. 如何接受上级指令_上级应该如何向下属下命令---如何领导你的下属
  5. Android自定义控件进阶03-Canvas之画布操作
  6. 魅蓝3 android底层,因各种不稳定 魅族要和YunOS说再见了,魅蓝3将转安卓底层
  7. 2020年小红书双11行业投放报告
  8. SAP生产订单创建、工序删除/增加、组件删除/增加、生产订单下达、采购订单创建
  9. oracle中trim,ltrim,rtrim函数用法(简单易懂)
  10. pi数据库同步解决方案_转:PI实时数据库 入门和进阶指南