zoukankan      html  css  js  c++  java
  • [蓝桥杯][历届试题]蚂蚁感冒

    http://www.dotcpp.com/oj/problem1454.html

    题目描述

    长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。

    每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

    当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

    这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

    请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

    输入

    第一行输入一个整数n  (1  <   n  <   50),  表示蚂蚁的总数。 

    接着的一行是n个用空格分开的整数  Xi  (-100  <   Xi  <   100),  Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数  据代表的蚂蚁感冒了。

    输出

    要求输出1个整数,表示最后感冒蚂蚁的数目。 

    样例输入

    5 
    -10  8  -20  12  25 

    样例输出

    3
    

    在蚂蚁相遇然后向相反方向爬行的过程,可以看成两只蚂蚁继续以原来的方向爬行。与最初蚂蚁爬行方向相反且在该蚂蚁的前方的蚂蚁都会感冒,在有蚂蚁被感冒后,在该蚂蚁后方且爬行方向相同的蚂蚁又会感冒。

    #include<stdio.h>
    #define N 120
    struct data
    {
        int s;
        int t;
    }x,a[N];
    int main()
    {
        int n,i,num,temp,sum;
        while(scanf("%d",&n)!=EOF)
        {
            sum=1;
            for(i=0;i<101;i++)
            {
                a[i].s=0;
                a[i].t=0;
            }
            scanf("%d",&temp);
             
            for(i=1;i<n;i++)
            {
                scanf("%d",&num);
                if(num<0)
                {
                    num=-num;
                    a[num].s=1;
                    a[num].t=-1;
                }
                else
                {
                    a[num].s=1;
                    a[num].t=1;
                }
            }
            if(temp<0)
            {
                for(i=0;i<-temp;i++)
                {
                    if(a[i].s==1&&a[i].t==1)
                        sum++;
                }
                if(sum>1)
                for(i=-temp-1;i<101;i++)
                    if(a[i].s==1&&a[i].t==-1)
                        sum++; 
            }
            else
            {
                for(i=101;i>temp;i--)
                {
                    if(a[i].s==1&&a[i].t==-1)
                        sum++;
                }
                if(sum>1)
                for(i=temp;i>0;i--)
                    if(a[i].s==1&&a[i].t==1)
                        sum++; 
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    lvs实现故障转移(backup)
    shell计算
    CEGUI 聊天对话框
    SetRenderState 设置渲染状态【转】
    MFC 弹出对话框
    DrawIndexedPrimitive函数的详细解释【转】
    IDirect3DDevice9::Clear 【转】
    manifest 文件错误
    D3DXMatrixLookAtLH 【转】
    D3D中的网格(Mesh)
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10002959.html
Copyright © 2011-2022 走看看