一、题目
二、解题思路
- 如果只有一个学校,则直接间隔就坐;
- 否则定义二维数据 a[mm[0]*10][n] ,每列表示一个学校的所有同学;
- if(m[j]*10>i) 则表示有同学,if(mm[0]>mm[1] && m[m_max2]*10<=i) 表示只剩下一个学校,间隔就坐,if(m_max>m_max2 && m[m_max2]*10==i) 表示此时两个同学也需要间隔就坐;
- 按照指定的格式输出。
三、代码
#include<iostream>
using namespace std;
int main()
{
int n,m[105],mm[105],m_max,m_max2;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m[i];
mm[i]=m[i];
}
if(n==1)
{
int cot=0;
cout<<"#1"<<endl;
for(int i=1;i<=m[0]*10*2;i+=2)
{
if(cot%10)
{
cout<<" ";
}
cout<<i;
cot++;
if(cot%10==0)
{
cout<<endl;
}
}
return 0;
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(mm[j]<mm[j+1])
{
int t=mm[j];
mm[j]=mm[j+1];
mm[j+1]=t;
}
}
}
for(int i=0;i<n;i++)
{
if(m[i]==mm[0])
{
m_max=i;
}
if(m[i]==mm[1])
{
m_max2=i;
}
}
int a[mm[0]*10][n],k=1;
for(int i=0;i<mm[0]*10;i++)
{
for(int j=0;j<n;j++)
{
if(m[j]*10>i)
{
if(mm[0]>mm[1] && m[m_max2]*10<=i)
{
if(m_max>m_max2 && m[m_max2]*10==i)
{
k++;
}
a[i][j]=k;
k+=2;
}
else
{
a[i][j]=k++;
}
}
else
{
a[i][j]=0;
}
}
}
for(int i=0;i<n;i++)
{
cout<<"#"<<i+1<<endl;
for(int j=0;j<mm[0]*10;j++)
{
if(a[j][i]==0)
{
break;
}
if(j%10>0)
{
cout<<" ";
}
cout<<a[j][i];
if((j+1)%10==0)
{
cout<<endl;
}
}
}
return 0;
}
四、总结
只有一个学校的情况。