L1-049 天梯赛座位分配 (20 分)

L1-049 天梯赛座位分配 (20 分)

 

 L1-049 天梯赛座位分配 (20 分)

 

 我们用一个二维数组存数据。用g[i][0]存第i个学校的总人数。

然后 我们 以行为学校编号,展开每个学校的人数。

从第一列到最后一列依次由上往下编号。

#include <iostream>
using namespace std;
const int N = 110;
int g[N][N];
int n;

int main()
{
    cin >> n;
    int col = -1;
    for(int i = 1, num; i <= n; i++)
    {
        cin >> num;
        g[i][0] = num * 10;
        col = max(col, num * 10);  // 取人数最多的当作列
    }
    int pre = 0, num = 0;
    for(int i = 1; i <= col; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(i > g[j][0]) continue;  // 当前学校的总人数小于当前列就不用再编号了 人都没了
            if(pre == j) ++num;  // 如果前一个编号的跟现在的编号的来自同一个学校 就要跨一个数
            g[j][i] = ++num;
            pre = j; // 记录当前编号的是哪个学校的,用于对下一位编号
        }
    }
    for(int i = 1; i <= n; i++)
    {
        cout << '#' << i;
        for(int j = 1; j <= g[i][0]; j++)
        {
            if(j % 10 == 1) cout << endl << g[i][j];
            else cout << ' ' << g[i][j];
        }
        cout << endl;
    }
    return 0;
}

 

上一篇:258.各位相加


下一篇:C++全局变量