基础模拟,循环结构
先判断是否可以连票 如果可以 依次输出结果后跳出
如若不能连票(即flag == 0 && i循环到了末尾) 则插入式选座 从头开始遍历未占用的座位并逐个输出
#include<stdio.h>
int main() {
int tic[105] = { 0 }, flag = 0;
int temp = 0, n, p, i, j, t;
scanf("%d", &n);
for (t = 1; t <= n; t++) {
scanf("%d", &p); flag = temp = 0;
for (i = 1; i <= 100; i++) {
if (tic[i] == 0) temp++; // 计数,看是否满足连票;
if (temp == p) { // 满足连票;
for (j = i - p + 1; j <= i; j++) {
tic[j] = 1; printf("%d", j);
if (j != i) printf(" ");
}
flag++;
break;
}
if (i % 5 == 0) temp = 0;
if (i == 100 && !flag) { // 插入座位;
for (j = 1; j <= 100; j++) {
if (tic[j] == 0) {
tic[j] = 1; printf("%d", j);
temp++;
if (temp != p) printf(" ");
}
if (temp == p) break;
}
}
}
printf("\n");
}
return 0;
}