【CCFCSP】201609-2 火车购票

试题编号: 201609-2
试题名称: 火车购票
时间限制: 1.0s
内存限制: 256.0MB

因为火车的座位号是连续的,而对于每一排,总是编号小的座位先被卖出,所以可以考虑用一个数组保存每一排被卖出的座位数量。
在每次寻找能买的座位时,先遍历一遍数组查看是否有一排的剩余座位大于等于要买的数量,如果有,就选择第一个满足要求的排。
如果买不到同一排相邻的座位,就从头往后寻找每一排的空座位,直到找到的座位数满足要求。

int a[20];//保存每一排被占的座位数
int main() {
    int n, p;
    cin >> n;
    while (n--) {
        cin >> p;
        bool flag = 0;
        //首先判断是否能够买到同一排相邻的座位
        for (int i = 0; i < 20; i++) {
            if (a[i] + p <= 5) {
                for (int j = 0; j < p; j++) {
                    if (j == p - 1)
                        cout << i * 5 + a[i] + j + 1 << endl;
                    else
                        cout << i * 5 + a[i] + j + 1 << ' ';
                }
                a[i] += p;
                flag = 1;
                break;
            }
        }
        //如果不能买到同一排相邻的座位,就依次寻找空的座位
        if (!flag) {
            int num = 0;
            for (int i = 0; i < 20; i++) {
                if (a[i] < 5) {
                    num++;
                    if (num == p) {
                        cout << i * 5 + a[i] + 1 << endl;
                        break;
                    }else
                        cout << i * 5 + a[i] + 1 << ' ';
                    a[i]++;
                    i--;//因为在这一排还可能有空座位剩余
                }
            }
        }
    }
}

你可能感兴趣的:(CCFCSP)