1006. Sign In and Sign Out (25)

这道题今天也顺便做完了,虽然AC了但是心有余悸。

1006

题目意思很简单,找出其中最早来的和最晚走的。难点是时间很明显要用字符串储存,也就是转化类型的一个问题。另一个地方是ID长度是不固定的,也就是说你只能靠空格来判断ID是否输入完毕。

一开始想用string但是总是出问题,就改用字符数组。后来再换回来又没问题了……

/* 题目:1006      */
/* 作者:ChanWunsam    */
/* 时间:2017.12.21    */
#include <cstdio>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;

struct Node{
    char ID[16];
    char SignInTime[9];
    char SignOutTime[9];
};
typedef struct Node *Student;


int transTime(char S[]);
int atoi(char S[], int a, int b);

int main()
{
    //freopen("C:\\Users\\ChanWunsam\\Desktop\\pat\\pat_in.txt","r",stdin);
    //freopen("C:\\Users\\ChanWunsam\\Desktop\\pat\\pat_out.txt","w",stdout);

    int M, i, j, k, *InTime, *OutTime, First, Final;
    char ID[16], In[9], Out[9];
    Student S;
    cin>>M;

    S=(struct Node *)malloc(M*sizeof(struct Node));
    InTime=(int *)malloc(M*sizeof(int));
    OutTime=(int *)malloc(M*sizeof(int));

    /* 输入 */
    for(i=0; i<M; i++)
    {
        cin>>ID>>In>>Out;
        strcpy(S[i].ID, ID);
        strcpy(S[i].SignInTime, In);
        strcpy(S[i].SignOutTime, Out);
    }

    /* 转化类型,并统计时间 */ 
    for(i=0; i<M; i++)
    {
        InTime[i]=transTime(S[i].SignInTime);
        OutTime[i]=transTime(S[i].SignOutTime);
    }

    /* 找出最早来的和最晚走的 */ 
    First=Final=0;
    for(i=1; i<M; i++)
    {
        if(InTime[i]<InTime[First])
            First=i;
        if(OutTime[i]>OutTime[Final])
            Final=i;
    }
    cout<<S[First].ID<<" "<<S[Final].ID;

    return 0;
}

/* 将时间字符转化为以秒为单位的整形数值 */
int transTime(char S[])
{
    int Time;
    Time=atoi(S,0,1)*3600+atoi(S,3,4)*60+atoi(S,6,7);
    return Time;
}

/* 将下标a-b的字符串转化为整形并返回值 */ 
int atoi(char S[], int a, int b)
{
    int i, Num;
    Num=0;
    for(i=a; i<=b; i++)
    {
        Num*=10;
        Num+=S[i]-'0';
    }
    return Num;
}

总觉得自己的很不规范,也就写题这样做做吧,要是做工程肯定被打死。


看了下别人的做法,这一次思路完全不一样了。我是将输入值全部看作字符,大神的做法是将“:”看作运算符重载,然后时间用一个结构体储存。不好说谁的做法更高明,但很明显他的基础会比我更好。
附上:http://blog.csdn.net/apie_czx/article/details/45363435


时间复杂度:

1006测试

时间永远不及大神的,很无奈……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值