mambaForLife 2020-04-04 17:54 采纳率: 0%
浏览 264

有关 杭电 OJ 2093——考试排名 的问题

我的代码在本地运行“看起来”没问题(用题目中的用例测试),但是提交之后就显示 Wrong Answer。我已经折腾了大半天,但还是找不到问题出在了哪里,希望热心的大佬帮我看看,在此感激不尽。(由于没有C币,所以不能设置悬赏,请见谅。)

问题描述和输入输出说明如下:

问题描述

输入输出说明

这里是题目链接

我的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NAME_LENGTH 11
#define QUESTION_COUNT 13
#define STUDENT_COUNT 10000

typedef struct {
    char name[NAME_LENGTH];
    int accepted;
    int time;
} Student;
Student students[STUDENT_COUNT];

int MyCompare(const void *q,const void *w);
void PrintStudentRank(Student students[], int length);

int main() {
    int questionCount, penalty;
    scanf("%d %d", &questionCount, &penalty);
    getchar(); // 读出回车符
    int studentIdx = 0;
    // 读取每个学生的信息
    while(scanf("%s", students[studentIdx].name) != EOF) {
        students[studentIdx].accepted = 0;
        students[studentIdx].time = 0;
        // 统计该学生这 questionCount 道题的解答情况
        for(int i = 0; i < questionCount; i++) {
            int timeCost;
            scanf("%d", &timeCost);
            if(timeCost > 0) {
                students[studentIdx].accepted++;
                students[studentIdx].time += timeCost;
                if(getchar() == '(') { // 有括号的情况,加上惩罚时间
                    int faultTimes;
                    scanf("%d", &faultTimes);
                    students[studentIdx].time += penalty * faultTimes;
                    getchar(); // 读出右括号
                }
            }
        }
        // 排序后输出
        qsort(students, studentIdx + 1, sizeof(Student), MyCompare);
        PrintStudentRank(students, studentIdx + 1);
        studentIdx++;
        getchar(); // 读出回车符
    }

    return 0;
}

int MyCompare(const void *q,const void *w) {
    Student *s1=(Student*)q,*s2=(Student*)w;
    if(s1->accepted != s2->accepted)
        return s2->accepted - s1->accepted;
    if(s1->time != s2->time)
        return s1->time - s2->time;
    return strcmp(s1->name, s2->name);
}

void PrintStudentRank(Student students[], int length) {
    for(int i = 0; i < length; i++)
        printf("%-10s %2d %4d\n", students[i].name,
               students[i].accepted, students[i].time);
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-04 20:34
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?