4
3 5 4 3
#include<iostream> using namespace std; int a[20]; int main() { //初始化座位 for (int i = 0; i < 20; i++) a[i] = 5; int n; cin >> n; int num; int start, end;//售出座位的开始位置和结束位置 for (int i = 0; i < n; i++) { cin >> num; for (int j = 0; j < 20; j++) { if (a[j] >= num) { //当前行够分配 start = j * 5 + (5 - a[j] + 1); end = start + num - 1; //输出结果 for (int k = start; k <= end; k++) { if (k != start) cout << " "; cout << k; } cout << endl; a[j] -= num; num = 0;//已经全部分配完成 break; } } //一排不够分的情况 while (num > 0) { for (int j = 0; j < 20; j++) { if (a[j] >= num) { //当前行够分配 start = j * 5 + (5 - a[j] + 1); end = start + num - 1; //输出结果 for (int k = start; k <= end; k++) { if (k != start) cout << " "; cout << k; } cout << endl; a[j] -= num; num = 0;//已经全部分配完成 break; } else { //当前行不够分 //把当前行全部分配之后再继续查找下一行 if (a[j] > 0) { //当前行有剩余的座位,,当前行如果没有空着的座位的话则不能分配 start = j * 5 + (5 - a[j] + 1); end = start + a[j] - 1; for (int k = start; k <= end; k++) { cout << k<<" "; } } num -= a[j];//当前购票人还差几张票,如果全部分配完,那么num=0 } } } } system("pause"); return 0; }
原文:https://www.cnblogs.com/syq816/p/12423219.html