zoukankan      html  css  js  c++  java
  • CCF CSP 201609-2 火车购票

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址

    CCF CSP 201609-2 火车购票

    问题描述

      请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。
      假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。
      购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。
      假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。

    输入格式

      输入的第一行包含一个整数n,表示购票指令的数量。
      第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个数之间使用一个空格分隔。

    输出格式

      输出n行,每行对应一条指令的处理结果。
      对于购票指令p,输出p张车票的编号,按从小到大排序。

    样例输入

    4
    2 5 4 2

    样例输出

    1 2
    6 7 8 9 10
    11 12 13 14
    3 4

    样例说明

      1) 购2张票,得到座位1、2。
      2) 购5张票,得到座位6至10。
      3) 购4张票,得到座位11至14。
      4) 购2张票,得到座位3、4。
    评测用例规模与约定
      对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。

    解析

    用一个vector记录每一排还剩了多少个座位,初始为5。

    用了两个子函数让程序的结构更加清晰。

    程序

    C++

    #include <cstdio>
    #include <vector>
    
    using namespace std;
    
    vector<int> seats(20,5);
    
    void printSeats(int row, int num) {
        for(int i=1; i<=num; i++) {
            printf("%d ", row*5+i+5-seats[row]);
        }
    }
    
    void requstSeats(int num) {
        for(int i=0; i<20; i++) {
            if(seats[i] >= num) {
                printSeats(i, num);
                seats[i] -= num;
                num = 0;
            }
        }
        int i = 0;
        while(num) {
            if(seats[i] > 0) {
                if(num <= seats[i]) {
                    printSeats(i, num);
                    num = 0;
                    seats[i] -= num;
                }
                else {
                    printSeats(i, seats[i]);
                    num -= seats[i];
                    seats[i] = 0;
                }
            }
            i++;
        }
        printf("
    ");
    }
    
    int main() {
        int N;
        scanf("%d", &N);
        
        int req;
        for(int n=0; n<N; n++) {
            scanf("%d", &req);
            requstSeats(req);
        }
    }
  • 相关阅读:
    test
    Data mining with WEKA, Part 2: Classification and clustering
    MyISAM和InnoDB的区别
    SpringMVC源码剖析(一) 从抽象和接口说起
    数据库隔离级别详解
    spring MVC配置详解
    Spring单实例、多线程安全、事务解析
    mysql中int、bigint、smallint 和 tinyint的区别
    SpringMVC源码剖析(二) DispatcherServlet的前世今生
    SpringBoot与Lombok
  • 原文地址:https://www.cnblogs.com/meelo/p/7638686.html
Copyright © 2011-2022 走看看