总结:
1、用STL方便多了。每个学校的轮换用的是queue,每个座位的存放是vector< int >G[105],二维数组,每次放座位的时候就取出当前轮到的学校编号,存入,再把该学校编号删除,用a数组记录该学校是否还能放人,若可以,就把该学校编号push_back()回去。
2、注意:要注意只剩一个学校的情况,且对学校的判断要在学校编号删除的前面,不然会错(若在后面,则剩两个学校是pop了一个,进入if语句了)。
3、格式!!最后一行也要输出。
#include<bits/stdc++.h>
using namespace std;
int main()
{
//每个学校的轮换用队列queue;
int n;
cin>>n;
queue<int>q;
vector<int>G[105];
int a[105];
for(int i=1;i<=n;i++)
{
cin>>a[i];
//变为学校的参赛人数
a[i]=a[i]*10;
//把学校的编号放入队列
q.push(i);
}
//若队伍为空,跳出循环
int people=0;
while(!q.empty())
{
//t是该学校的编号
int t=q.front();
//只剩一个学校
if(q.size()==1)
{
for(int i=people+1,j=1;j<=a[t];i=i+2,j++)
{
G[t].push_back(i);
}
//最后一个学校循环完就退出
break;
}
q.pop();
people++;
G[t].push_back(people);
//该校可容纳人数-1
a[t]--;
//若还能容纳人
if(a[t]) q.push(t);
}
//输出
for(int i=1;i<=n;i++)
{
cout<<"#"<<i<<endl;
for(int j=0;j<G[i].size();j++)
{
cout<<G[i][j];
if(j%10==9) cout<<endl;
else cout<<" ";
}
}
return 0;
}