#include<stdio.h>
#define n 7
#define m 12

int main()
{
    char kamoku[m][n] = {"科目", "国語", "数学", "理科", "社会", "英語", "合計"};
    char namae[m][n] = {"科目", "太郎", "次郎", "三郎", "四郎", "五郎", "花子", "春子", "夏子", "秋子", "冬子", "平均"};
    int i, j, k;
    // printf("%d %d\n", sizeof(kamoku),sizeof(kamoku[0]));
    for (i = 0; i < m; i++) {}
    double seiseki[m][m] = {{0, 0, 0, 0, 0, 0}, {0, 74, 93, 80, 73, 99}, {0, 78, 82, 78, 82, 74}, {0, 94, 68, 61, 71, 87}, {0, 82, 76, 96, 68, 78}, {0, 74, 79, 70, 61, 78}, {0, 89, 70, 70, 60, 72}, {0, 84, 96, 65, 75, 85}, {0, 91, 83, 89, 66, 75}, {0, 80, 83, 75, 71, 64}, {0, 86, 96, 93, 70, 62}};
    for (i = 0; i < m + 1; i++)
    {
        for (j = 0; j < n - 1; j++) {}
    }
    printf("┌───┬──┬──┬──┬──┬──┬───┐\n");//一行目,科目名が３文字なのでそれぞれにスペースを入れて罫線をそろえる!
    printf("│");//二行目
    printf("科目名", kamoku[0]);
    for (i = 1; i < n - 1; ++i)
    {
        printf("│%s", kamoku[i]);
    }
    printf("│ %s │\n", kamoku[6]);
    printf("├───┼──┼──┼──┼──┼──┼───┤\n");//三行目
    for (i = 1; i < 11; i++)   //成績表示
    {
        printf("│　%s", namae[i]);
        for (j = 1; j < n - 1; j++)
        {
            printf("│%4.0f", seiseki[i][j]);
            seiseki[i][0] += seiseki[i][j]; //横計
        }
        printf("│%6.0f│\n", seiseki[i][0]);
        printf("├───┼──┼──┼──┼──┼──┼───┤\n");//三行目をコピー
    }
    printf("│　%s", namae[11]);
    for (j = 1; j < n - 1; j++)
    {
        for (i = 1; i < m - 1; i++)
        {
            seiseki[0][j] += seiseki[i][j]; //縦計
        }
        printf("│%4.1f", seiseki[0][j] / (m - 2)); //科目平均
        seiseki[0][0] += seiseki[0][j]; //総点
    }
    printf("│%6.1f│\n", seiseki[0][0] / (m - 2)); //合計平均

    printf("└───┴──┴──┴──┴──┴──┴───┘\n");


    for (i = 1; i <= 5; ++i)
    {
        printf("\n%s\n順位　名前　成績\n", kamoku[i]);
        int min = seiseki[1][i];
        int max = min;
        for (j = 1; j < m - 1; ++j)
        {
            if (min > seiseki[j][i])min = seiseki[j][i];
            if (max < seiseki[j][i])max = seiseki[j][i];
        }
        int juniDisp, juniInternal = 1;
        for (j = max; j >= min; --j)
        {
            juniDisp = juniInternal;
            for (k = 1; k < m - 1; ++k)
            {
                if (seiseki[k][i] == j)
                {
                    ++juniInternal;
                    printf("%2d   %6s %3d\n", juniDisp, namae[k], j);
                }
            }
        }
    }
    return 0;
}
