采用一个一维数组,存储每排的座位数,每次需要购买的数量,依次对比即可,找到连坐,给连坐,否则从最小开始分配,完成后相应排减去对应座位数,不需要用二维数组存位置信息,直接计算输出就可
using namespace std;
#include<bits/stdc++.h>
int main(){
int n;
int a[20],b[100];
cin>>n;
int i,j;
for(i=0;i<20;i++) a[i]=5;
for(i=0;i<n;i++) cin>>b[i];
for(i=0;i<n;i++){
bool flag=0;
for(j=0;j<20;j++){//可直接买
if(b[i]<=a[j]){
for(int k=1;k<=b[i];k++){
cout<<j*5+(5-a[j]+k)<<" ";
}
cout<<endl;
a[j]-=b[i];
flag=1;
break;
}
}
if(!flag){//不能连着买了,得分开买了
for(j=0;j<20;j++){
if(b[i]>=a[j]){
for(int k=1;k<=a[j];k++){
cout<<j*5+(5-a[j]+k)<<" ";
}
b[i]-=a[j];
a[j]=0;
}
else{
for(int k=1;k<=b[i];k++){
cout<<j*5+(5-a[j]+k)<<" ";
}
cout<<endl;
a[j]-=b[i];
flag=1;
break;
}
}
}
}
return 0;
}