思路分析:
? 这道题的意思就是把三个队伍进行编号,按照第一队的第一个人,第二队的第一个人,第三队的第一个人,再第一队的第二个人.....以此类推。其实可以看成一个二维数组,行是各个学校,列是各个队伍中的人。比如样例就可以看成一个二维数组,第一行有30列,因为每个队伍有十个人,第一个学校有三支队伍。后面也是一样。再定义一个数组记录每个学校的队伍总人数。还有就是如何判断只剩下一个学校的人了,标记前一个人是哪个学校的,如果的这个人的学校相同的话,就把编号+1(相同学校的人之间隔一个)。
代码实现;
#include<bits/stdc++.h>
using namespace std;
int n,m,max1=0,sum=1, flag=-1;
int book[101][101];
int ans[101][101];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
if(m>max1)
max1=m;
for(int j=0;j<m*10;j++)
{
book[i][j]=1;
}
}
for(int i=0;i<max1*10;i++)
for(int j=0;j<n;j++)
{
if(book[j][i])
if(flag!=j)
{
ans[j][i]=sum++;
flag=j;
}
else
{
sum++;
ans[j][i]=sum++;
flag=j;
}
}
for(int i=0;i<n;i++){
cout<<"#"<<i+1<<endl;
for(int j=0;j<max1*10;j++)
if(ans[i][j])
{
if((j+1)%10)
cout<<ans[i][j]<<" ";
else cout<<ans[i][j]<<endl;
}
}
return 0;
}
?
|