L1-049 天梯赛座位分配

一、题目

二、解题思路

  1. 如果只有一个学校,则直接间隔就坐;     
  2. 否则定义二维数据 a[mm[0]*10][n] ,每列表示一个学校的所有同学;
  3. 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) 表示此时两个同学也需要间隔就坐;
  4. 按照指定的格式输出。

三、代码

#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;
}

四、总结

        只有一个学校的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值