我们用一个二维数组存数据。用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; }