注意:当没有相连的座位时,从编号较小的座位依次进行分配
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N];
int chair[25][10];
int sum[25][10];
int main() {
int n,m;
scanf("%d",&n);
for(int i=1;i<=20;i++) {
for(int j=1;j<=5;j++) {
chair[i][j]=1;
}
}
for(int i=1;i<=n;i++) {
scanf("%d",&m);
int cunt=0;
int flag=0;
for(int j=1;j<=20;j++) {
cunt=0;
for(int k=1;k<=5;k++) {
if(chair[j][k]==1&&!cunt) {
cunt=1;
}
if(chair[j][k]&&chair[j][k-1]&&cunt) {
cunt++;
}
if(cunt==m) {
flag=1;
for(int g=k-m+1;g<=k;g++) {
chair[j][g]=0;
printf("%d ",(j-1)*5+g);
}
break;
}
}
if(flag) break;
}
if(!flag) {
cunt =0;
for(int j=1;j<=20;j++) {
for(int k=1;k<=5;k++) {
if(chair[j][k]) {
chair[j][k]=0;
cunt++;
printf("%d ",(j-1)*5+k);
}
if(cunt==m) {
flag=1;
break;
}
}
if(flag) break;
}
}
printf("\n");
}
return 0;
}