TCreopargh
书山有路搞为径,学海无涯机作舟。
乱搭的站

(C++)考勤系统

问题描述
keyboard_arrow_down

实验室使用考勤系统对学生进行考勤。考勤系统会记录下每个学生一天内每次进出实验室的时间。每位学生有一个唯一编号,每条考勤记录包括学生的编号,进入时间、离开时间。给出所有学生一天的考勤记录,请统计每个学生在实验室工作的时间,并按照工作时间从长到短给出一天的统计表,工作时间相同时按编号从小到大排序。

输入说明
keyboard_arrow_down

输入的第一行包含一个整数n,表示考勤记录条数。1≤n≤100,学生的编号为不超过100的正整数。 
接下来是n行,每行是一条考勤记录,每条记录包括学生编号k,进入时间t1和离开时间t2三项。t1和t2格式为“hh:mm”,即两位数表示的小时和两位数表示的分钟。例如14:20表示下午两点二十分,所有时间均为24小时制,且均为同一天内的时间。 。

输出说明
keyboard_arrow_down

输出按工作时间和学生编号排序的统计表。统计表包含若干行,每行为一个学生的出勤记录,由学生编号和总工作时间构成,总工作时间以分钟为单位。

输入样例
keyboard_arrow_down


3 08:00 11:50 
1 09:00 12:00 
3 13:50 17:30 
1 14:00 18:00 
2 17:00 24:00  

输出样例
keyboard_arrow_down

3 450 
1 420 
2 420 

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    int n,stud[1002];
    cin>>n;
    for(int i=0;i<=1000;i++)
    {
        stud[i]=-1;
    }
    for(int i=0;i<n;i++)
    {
        int id;
        cin>>id;
        int bh,bm,eh,em;
        scanf("%d:%d",&bh,&bm);
        scanf("%d:%d",&eh,&em);
        if(stud[id]==-1)
        {
            stud[id]+=(eh-bh)*60+(em-bm)+1;
        }
        else
            stud[id]+=(eh-bh)*60+(em-bm);
    }
    for(int i=0;i<=1000;i++)
    {
        int MAX=-2147483647,idmark=0;
        for(int j=1000;j>0;j--)
        {
            if(stud[j]>=0&&stud[j]>=MAX)
            {
                MAX=stud[j];
                idmark=j;
            }  
        }
        if(MAX>=0)
        {
            cout<<idmark<<" "<<MAX<<endl;
            stud[idmark]=-1;
        }
    }
    return 0;
}

赞赏

发表回复

textsms
account_circle
email

乱搭的站

(C++)考勤系统
问题描述 keyboard_arrow_down 实验室使用考勤系统对学生进行考勤。考勤系统会记录下每个学生一天内每次进出实验室的时间。每位学生有一个唯一编号,每条…
扫描二维码继续阅读
2018-11-26