YTU 3379

 猫猫学长带着今年的预备队员参加了sdibt大学第五届趣味编程大赛,本次比赛共有九道题,编号依次为A、B、C、D、E、F、G、H和I。
比赛按照每人的做题数目和累计罚时进行综合排名。
(1)做题数目多的排名高于做题数目少的;
(2)在做题数目相同的情况下,按照罚时的累计时间进行排序,罚时时间越少排名越高。
        其中罚时按照如下规则计算:如果题目没有做对过,则该题目不累计入总罚时。否则按照该题目第一次做对的时间累计入总罚时,
        同时累计该题的做错次数,每错一次,增加20分钟罚时。例如,zhangzhentang 同学的提交记录如下:
    A                 B         C                D             E               F                G                  H               I
 00:07:27(-1) 0(-2) 00:56:56(-4) 0(-3) 01:15:41(-1) 01:36:17(-1) 02:24:10(-1) 01:50:05(0)   0(-4)
其中 A题提交的时间是00:07:27,该题错过一次。B题没有做对,但提交过两次错误......,该同学的累计罚时计算为:
00:07:27 + 1*20分钟 + 00:56:56 + 4*20分钟 + 01:15:41 + 1*20分钟 + 01:36:17+ 1*20分钟 + 02:24:10 + 1*20分钟 + 01:50:05
= 10:50:36 。累计做对题目数 6 道题。

输入

n名同学的做题记录

输出

n名同学的排名,以及罚时,如果题目正确数和罚时完全相同,则按照姓名的字典序排列。

输入输出样例

Nick    A        B        C        D        E        F        G        H        I
linlin    00:07:21(-1)    0(0)        0(-3)        0(0)        00:41:17(0)    01:08:53(0)    02:29:25(-6)    03:17:39(-4)    0(0)
ningnin    00:10:24(-3)    0(-4)        01:35:09(-7)    01:56:45(-2)    02:23:43(0)    0(0)        0(-4)        03:03:43(0)    0(0)
feifei    00:06:58(-2)    0(0)        0(-6)        0(-6)        02:48:59(-9)    01:52:51(-4)    0(0)        02:18:42(0)    0(0)
qiqi    00:49:07(-6)    0(0)        0(-1)        0(0)        01:36:37(-2)    02:10:25(-1)    0(-2)        0(-4)        0(0)
xuanxua    00:12:56(-4)    0(-3)        0(-3)        01:16:41(0)        0(0)        0(-1)        0(-4)        0(-2)        0(0)
juju    00:08:04(-2)    0(0)        01:13:06(-3)    0(0)        0(-1)        0(-3)        0(0)        0(0)        0(-2)
jiajia    00:06:12(-1)    0(-1)        0(0)        0(0)        01:47:21(-3)    0(-2)        0(-2)        0(0)        0(0)

样例输出 #1

Rank    Nick        Solve        Penalty
1    linlin        5        11:24:35
2    ningnin        5        13:09:44
3    feifei        4        12:07:30
4    qiqi        3        07:36:09
5    xuanxua        2        02:49:37
6    juju        2        03:01:10
7    jiajia        2        03:13:33

代码如下:

#include<iostream>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<algorithm>
using namespace std;

typedef struct node//建立学生结构体
{
    char name[20];
    int solve = 0;
    int time = 0;
}stud;

bool cmp(stud a, stud b)//排序函数
{
    if (a.solve != b.solve)//先看解决问题数目
        return a.solve > b.solve;
    else if (a.time != b.time)//再看花费时间
        return a.time < b.time;
    else//最后看名字
        return strcmp(a.name, b.name) < 0;
}

int jisuan1(int sum)//从秒计算小时
{
    int a;
    a = sum / 3600;
    return a;
}
int jisuan2(int sum)//从秒计算分钟
{
    int b;
    b = sum % 3600 / 60;
    return b;
}
int jisuan3(int sum)//计算秒
{
    int c;
    c = sum % 3600 % 60;
    return c;
}

int main()
{
    int n = 1;
    char str[20];
    stud stu[20];
    for (int i = 1; i <= 10; i++)//先输入题目标题A~I
        scanf("%s", str);
    while (~scanf("%s", str))
    {
        strcpy(stu[n].name, str);//输入名字
        for (int j = 1; j < 10; j++)//每个题目
        {
            scanf("%s", str);//输入每个题目花费时间
            if (strlen(str) > 5)//如果输入的花费的时间的字符长度大于5,也就是说明不是 0(-n)的形式,就说明这道题做出来了
            {
                stu[n].solve++;//那么该同学解决的问题数目就加一
                stu[n].time += ((str[0] - '0') * 10 + (str[1] - '0')) * 3600;//字符串的第0位和第1位代表小时,给他换算成秒
                stu[n].time += ((str[3] - '0') * 10 + (str[4] - '0')) * 60;//同理,分钟变成秒
                stu[n].time += (str[6] - '0') * 10 + (str[7] - '0');//秒
                if (str[9] == '-')//如果该同学做错过,那说明会有罚时
                {
                    int num = 0;//记录十分位
                    for (int k = 10; k < strlen(str) - 1; k++)
                    {
                        num *= 10;
                        num += str[k] - '0';
                    }//最后求的num就是该同学做错该题的次数
                    stu[n].time += num * 20 * 60;//求得全部时间(秒)
                }
            }
        }
        n++;//下一位同学
    }
    sort(stu + 1, stu + 1 + n, cmp);//排序一下

    printf("Rank\tNick\t\tSolve\t\tPenalty\n");//输出表头  ps:\t代表一个制表符
    for (int i = 1; i < n; i++)//输出每个人的排名做题情况
        printf("%d\t%s\t\t%d\t\t%02d:%02d:%02d\n", i, stu[i].name, stu[i].solve, jisuan1(stu[i].time), jisuan2(stu[i].time), jisuan3(stu[i].time));
    return 0;
}

相关推荐

  1. YTU 3379

    2024-03-29 07:32:01       16 阅读
  2. YTU 4260

    2024-03-29 07:32:01       9 阅读
  3. P3378 【模板】堆

    2024-03-29 07:32:01       17 阅读
  4. ABC337(A-C)

    2024-03-29 07:32:01       33 阅读
  5. abc339(A-C)

    2024-03-29 07:32:01       38 阅读
  6. Leetcode 337 打家劫舍 III

    2024-03-29 07:32:01       21 阅读
  7. ABC339(A-C)

    2024-03-29 07:32:01       27 阅读
  8. RK3399 去掉HDMI音频

    2024-03-29 07:32:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 07:32:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 07:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 07:32:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 07:32:01       20 阅读

热门阅读

  1. 在Vue中创建生产和开发环境

    2024-03-29 07:32:01       21 阅读
  2. python-numpy-常用函数详解

    2024-03-29 07:32:01       17 阅读
  3. 久菜盒子|毕业设计|金融|DCC-GARCH模型

    2024-03-29 07:32:01       18 阅读
  4. OpenCV图像滤波、边缘检测

    2024-03-29 07:32:01       21 阅读
  5. Redis缓存数据库表(列单独缓存)

    2024-03-29 07:32:01       16 阅读