蓝桥杯真题——蚂蚁感冒(思维题)

题目:

在这里插入图片描述

输入输出:

在这里插入图片描述

分析:

1、如果两只健康的蚂蚁碰面之后,两只蚂蚁就会分别掉头,我们可以将这种情况看做两只蚂蚁都穿过了对方,每只蚂蚁还是保持原来的方向不变进行前进。
2、两只蚂蚁中的一只感冒,当两只蚂蚁碰面之后,按照之前的分析,这个感冒的蚂蚁仍然会按照原来的方向前进,但是此时,另一个健康蚂蚁穿过这只感冒的蚂蚁之后,自身也就会感冒。
综合上面的情况,我们假设刚开始感冒的蚂蚁头朝向左边,那么,此时这只感冒蚂蚁的左边的蚂蚁如果有朝向右边前进的都会被感染,左边的蚂蚁感染之后仍会继续前进,之后就会将感冒蚂蚁的右边的蚂蚁朝向左边前进的感染。但是如果感冒蚂蚁的左边蚂蚁没有朝向右边前进的,那么最终就只有它自身感冒。同样的情况也适用于开始的时候干嘛的蚂蚁头朝向右边。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

const int MAXN = 55;
int num[MAXN],n,inde;
int aa[2];

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&num[i]);
    if(num[1] < 0) inde = 0;  //表示感冒的蚂蚁头朝向左边
    else inde = 1;
    for(int i=2;i<=n;++i)
    {
        if(abs(num[i])<abs(num[1])&&num[i]>0)
            aa[inde]++;
        if(abs(num[i])>abs(num[1])&&num[i]<0)
            aa[1-inde]++;
    }
    if(aa[inde]==0)  
    {
        printf("1\n");
        return 0;
    }
    printf("%d\n",aa[inde]+aa[1-inde]+1);
    return 0;
}

发布了61 篇原创文章 · 获赞 7 · 访问量 3637

猜你喜欢

转载自blog.csdn.net/weixin_42469716/article/details/104592576