L1-049 天梯赛座位分配 (20分)
题目详情:
AC代码:
#include<iostream>
using namespace std;
int p[101][11][11]={0};//第i所学校第k支队伍的第j个队员的编号为p[i][k][j]
int q[11]={0};//第 i 所高校的参赛队伍数
int Max=0;//所有高校中最大队伍
int pre=0;//上一个被安排的队员所属学校
int main()
{
int n,i,j,k,t;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>q[i];
Max=max(Max,q[i]);
}
t=0;
for(k=1;k<=Max;k++)//第i所学校的第k支队伍。遍历到Max即最大队伍,保证所有队伍都安排好
{
for(j=1;j<=10;j++)//第i所学校第k支队伍的第j个队员
{
for(i=1;i<=n;i++)//第i所学校
{
if(k<=q[i])//若当前队伍小于等于第i学校的队伍数则写入数组
{
if(pre==i)//如果上一个被安排的队员所属学校和这次一样,说明是同校的,编号相隔着编
t+=2;
else
t++;//不是一个学校,正常加1排座位
p[i][k][j]=t;//第i所学校第k支队伍的第j个队员的编号为t
pre=i;
}
}
}
}
for(i=1;i<=n;i++)
{
cout<<'#'<<i<<endl;
for(j=1;j<=q[i];j++)
{
for(k=1;k<=9;k++)
cout<<p[i][j][k]<<' ';
cout<<p[i][j][k]<<endl;
}
}
return 0;
}
运行结果:
读题干觉得挺简单的,规律也能摸清楚,但真正敲代码的时候却是一头雾水。说到底还是基本功不扎实,对一些问题还不够敏感。以后读题时若可以描述为类似于题中的第i所学校第j支队伍第k个队员,就要想也许可以用多维数组做。
永远相信美好🎈