HDOJ 2023 ac 错误问题

代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n,m;
    int  a[50][5] = { 0 };
    double sudScore[50] = { 0 }, avgScore[5] = { 0 };
    while (~scanf_s("%d %d", &n, &m) && n > 0&&n<=50 && m > 0&&m<=5)
    {
        memset(a, 0, sizeof(a));
        memset(sudScore, 0, sizeof(sudScore));
        memset(avgScore, 0, sizeof(avgScore));
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                scanf_s("%d", &a[i][j]);
            }
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                sudScore[i] += a[i][j];
            }
            sudScore[i] /= m;
        }
        for (int j = 0; j < m; j++)
        {
            for (int i = 0; i < n; i++)
            {
                avgScore[j] += a[i][j];
            }
            avgScore[j] /= n;
        }
        for (int i = 0; i < n; i++)
        {
            if (i == n - 1)
            {
                printf("%.2lf\n", sudScore[i]);
            }
            else
            {
                printf("%.2lf ", sudScore[i]);
            }
        }
        for (int i = 0; i < m; i++)
        {
            if (i == m - 1)
            {
                printf("%.2lf\n", avgScore[i]);
            }
            else
            {
                printf("%.2lf ", avgScore[i]);
            }
        }
        int flag = 0;
        for (int i = 0; i < n; i++)
        {
            int flag1 = 0;
            for (int j = 0; j < m; j++) {
                if (a[i][j]>avgScore[j])
                {
                    flag1++;
                }
                if (flag1==m)
                {
                    flag++;
                }
            }
        }
        printf("%d\n\n", flag);
    }
    return 0;
}
 

输入示例于输出示例都相同,结果还是wrong anwser

请教各位大佬帮我康康,孩子对照其他大佬的代码就没发现问题,但是提交别人代码又能AC

在代码中,存在一些错误和潜在的问题:

  1. 在使用scanf_s函数读取输入时,应该使用%d格式说明符而不是%d %d。改为scanf_s("%d", &n)scanf_s("%d", &m)

  2. 在判断输入的n和m是否在合法范围内时,应该使用逻辑或||而不是逻辑与&&。改为n > 0 || n <= 50m > 0 || m <= 5

  3. 在计算每个学生的平均成绩时,应该使用除法运算符/而不是赋值运算符=。改为sudScore[i] /= m;

  4. 在计算每门课程的平均成绩时,应该使用除法运算符/而不是赋值运算符=。改为avgScore[j] /= n;

  5. 在统计高于每门课程平均成绩的学生人数时,应该将判断条件放在内层循环之外。改为在内层循环结束后判断if (flag1 == m)

  6. 在输出学生平均成绩和课程平均成绩时,应该使用%f格式说明符而不是%lf。改为printf("%.2f\n", sudScore[i]);printf("%.2f\n", avgScore[j]);

  7. 在每次输入学生成绩前,应该先清空输入缓冲区。可以使用fflush(stdin)while (getchar() != '\n')来清空输入缓冲区。

  8. 在每次输入学生成绩前,应该先判断输入是否成功。可以使用if (scanf_s("%d", &a[i][j]) != 1)来判断输入是否成功。

以上是我发现的一些错误和潜在问题,你可以根据需要进行修正。