这里那里写错了,试了几个例子都是对的





#include
int main()
{
    int x;
    int y;
    int target;
    int array[101][101];
    int sumOfRow[101];
    scanf("%d%d%d",&x,&y,&target);
    for(int i=1;i<=y;i++)
    {
        int sum=0;
        for(int j=1;j<=x;j++)
        {
            scanf("%d",&array[i][j]);
            sum+=array[i][j];
        }
        sumOfRow[i]=sum;
    }
    int sum=0;
    for(int k=1;k<=y;k++)
    {
        sum+=array[k][target];
    }
    for(int i=1;i<=y-1;i++)
    {
        for(int j=1;j<=y-1-i;j++)
        {
            int temp=0;
            if(sumOfRow[j+1]>sumOfRow[j])
            {
                temp=sumOfRow[j+1];
                sumOfRow[j+1]=sumOfRow[j];
                sumOfRow[j]=temp;
            }
        }
    }
    double average=sum*1.0/y;
    printf("%lf %d",average,sumOfRow[y]);
}

img

你行列搞反了。题目说前三个整数分别为行数,列数和统计平均值的列序号。因此x是行号,y是列号,但你后面x和y用反了

x是行,y是列,你代码里是反的
int main()
{
    int x;
    int y;
    int target;
    int array[101][101];
    int sumOfRow[101] = {0}, sum = 0;
    scanf("%d%d%d", &x, &y, &target);
    for (int i = 1; i <= x; i++) //
    {
        // int sum = 0;
        for (int j = 1; j <= y; j++) //
        {
            scanf("%d", &array[i][j]);
            sumOfRow[i] += array[i][j];
            if (j == target)
                sum += array[i][j];
        }
    }
    // int sum = 0;
    // for (int k = 1; k <= y; k++)
    // {
    //     sum += array[k][target];
    // }
    // for (int i = 1; i <= y - 1; i++)
    // {
    //     for (int j = 1; j <= y - 1 - i; j++)
    //     {
    //         int temp = 0;
    //         if (sumOfRow[j + 1] > sumOfRow[j])
    //         {
    //             temp = sumOfRow[j + 1];
    //             sumOfRow[j + 1] = sumOfRow[j];
    //             sumOfRow[j] = temp;
    //         }
    //     }
    // }
    int max = sumOfRow[0];
    for (int i = 1; i <= x; i++)
    {
        if (max < sumOfRow[i])
            max = sumOfRow[i];
    }
    double average = sum * 1.0 / y;
    printf("%lf %d", average, max);
}