zoukankan      html  css  js  c++  java
  • 排队IV

    题目描述
    在很多场合,我们都需要排队,比如超市付款,医院看病,就餐等等。“尊老爱幼”是中华名族的传统美德,所以在排队的过程中,遇到老人、幼儿我们应该主动让他们排在前面。请按以下 4 条规则编写一个排队的程序。
    (1)老人(年龄 ≥ 60 岁)和幼儿(年龄 ≤ 6 岁)比其他人(6 岁 < 年龄 < 60 岁)优先排在队伍的前面,且所有幼儿排在所有老人的前面。
    (2)老人按年龄从大到小的顺序排队,年龄大的优先,年龄相同时,先到的人排在前面。
    (3)幼儿按年龄从小到大的顺序排队,年龄小的优先,年龄相同时,先到的人排在前面。
    (4)其他人只按到达的先后顺序排队。

    输入
    输入共n+1行。
    第1行一个整数n,表示排队的总人数。
    第2行到第n+1行,按照到达的先后顺序给出了每个人的基本信息。每行两个整数,第一个整数表示这个人的编号(编号保证不会重复,但不保证连续),第二个整数表示这个人的年龄。

    输出
    输出共n行。
    每行一个人的编号,表示从前往后的排队结果。

    样例输入
    复制样例数据
    8
    1 14
    3 6
    4 5
    5 62
    11 48
    17 25
    21 60
    13 62
    样例输出
    4
    3
    5
    13
    21
    1
    11
    17

    提示
    共有8个人参加排队。编号为3和4的两个人为幼儿,年龄分别为6岁和5岁。编号为5、21和13的三个人为老人,年龄分别为62岁、60岁和62岁。根据排队规则,老人和幼儿排在其他人的前面,而幼儿又排在老人的前面,所以先排编号3和4的幼儿。幼儿按年龄从小到大的顺序排队,所以第一个人是4号,然后是3号。接下来排老人,老人年龄大的先排,所以先排5号和13号,但5号比13号先到,所以先排5号,然后13号,接下来21号。剩下的人不论年龄大小,全部按到达的顺序排队,依次为1号、11号和17号。

    【数据范围约定】
    40%的测试点输入数据保证1≤n≤99,且每个人的年龄都不相同。
    60%的测试点输入数据保证1≤n≤1000。
    100%的测试点输入数据保证1≤n≤30000,1≤人的编号≤32000,2≤人的年龄≤100。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main()
    {
        int n,i,j,cnt=0,xnt=0;
        cin>>n;
        int age[n][2],a[n],b[n];
        for(i=0;i<n;i++)
        {
            cin>>age[i][0]>>age[i][1];
            if(age[i][1]<=6||age[i][1]>=60)
            a[cnt++]=age[i][1];
            else if(age[i][1]>6&&age[i][1]<60)
            {
                b[xnt++]=age[i][0];
            }
    
        }
        sort(a,a+cnt);
        for(i=0;i<cnt;i++)
        {
            if(a[i]>6)
                break;
            for(j=0;j<n;j++)
            {
                if(a[i]==age[j][1])
                {
                   cout<<age[j][0]<<endl;
                   age[j][1]=0;
                }
            }
        }
        for(i=cnt-1;i>=0;i--)
        {
            if(a[i]<60)
                break;
            for(j=0;j<n;j++)
            {
                if(a[i]==age[j][1])
                {
                    cout<<age[j][0]<<endl;
                    age[j][1]=0;
                }
            }
        }
    
        for(i=0;i<xnt;i++)
        {
            cout<<b[i]<<endl;
        }
        return 0;
    }
    
    

    原来编号小不表示先到。
    主要思路就是用二维数组将年龄和编号联系起来,用另外一个一维数组记录年龄,既然不是按照序号再细分。就可以解决了。

    菜啊!

  • 相关阅读:
    【 Java框架】Spring的核心IOC源码分析
    小猪学设计模式——模板方法模式
    小猪学设计模式——工厂模式之抽象工厂
    小猪学设计模式——工厂模式之工厂方法模式
    小猪学设计模式——工厂模式之简单工厂(静态工厂)
    HTML5 Server-sent Events ASP.NET向Web客户端推送信息
    jquery.min.map 404 (Not Found)
    C# HTTP 断点续传
    C#操作JSON字符串
    Visual Studio 解决Windows Web服务框架中出现了无法识别的错误
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319593.html
Copyright © 2011-2022 走看看