zoukankan      html  css  js  c++  java
  • 飞行时间

    【问题背景】
    小 h 前往美国参加比赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达
    美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。
    小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。
    由于北京和美国东部有 12 小时时差,故飞机总共需要 14 小时的飞行时间。
    不久后小 h 的女朋友去中东交换。小 h 并不知道中东与北京的时差。但是小 h 得
    到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。
    【问题描述】
    对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相
    同,求飞机的飞行时间。
    【输入格式】
    从文件 timezone.in 中读入数据。
    一个输入文件包含多组数据。
    输入第一行为一个正整数 T,表示输入数据组数。
    每组数据包含两行,第一行为去程的起降 时间,第二行为回程的起降 时间。
    起降时间的格式如下
    h1:m1:s1 h2:m2:s2h1:m1:s1 h3:m3:s3 (+1)h1:m1:s1 h4:m4:s4 (+2)
    表示该航班在当地时间 h1 时 m1 分 s1 秒起飞;
    第一种格式表示在当地时间当日 h2 时 m2 分 s2 秒降落;
    第二种格式表示在当地时间次日 h3 时 m3 分 s3 秒降落;
    第二种格式表示在当地时间第三天 h4 时 m4 分 s4 秒降落。
    对于此题目中的所有以 h:m:s 形式给出的时间,保证 0 ≤ h ≤ 23, 0 ≤ m, s ≤ 59;对
    于不足两位数的情况,保证添加了前导零补齐两位。
    第 2 页 共 8 页
    NOIP 模拟题 第 13 套 飞行时间(timezone)
    【输出格式】
    输出到文件 timezone.out 中。
    对于每一组数据输出一行一个时间 hh:mm:ss,表示飞行时间为 hh 小时 mm 分
    ss 秒。
    注意,当时间为一位数时,要补齐前导零。如三点四分五秒应写为 03:04:05。


    送分的SB题挂了

    原因是我没有写gets

    输入卡了,导致输出少了一个

    这个故事告诉我们,gets可以将一整行读入,直到回车

    tips:空格也算一个字符

    下面给出代码:

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    inline int rd(){
        int x=0,f=1;
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
        return x*f;
    }
    inline void write(int x){
        if(x<0) putchar('-'),x=-x;
        if(x>9) write(x/10);
        putchar(x%10+'0');
        return ;
    }
    int n;
    char s1[106],s2[106],e1[106],e2[106];
    char add1[106],add2[106];
    int h1,h2,m1,m2,se1,se2;
    int ans=0;
    int ansh,ansm,anss;
    void change(){
        int l1=strlen(e1+1),l2=strlen(e2+1);
        h1=((e1[1]-'0')*10+(e1[2]-'0'))-((s1[1]-'0')*10+(s1[2]-'0'));
        h2=((e2[1]-'0')*10+(e2[2]-'0'))-((s2[1]-'0')*10+(s2[2]-'0'));
        m1=((e1[4]-'0')*10+(e1[5]-'0'))-((s1[4]-'0')*10+(s1[5]-'0'));
        m2=((e2[4]-'0')*10+(e2[5]-'0'))-((s2[4]-'0')*10+(s2[5]-'0'));
        se1=((e1[7]-'0')*10+(e1[8]-'0'))-((s1[7]-'0')*10+(s1[8]-'0'));
        se2=((e2[7]-'0')*10+(e2[8]-'0'))-((s2[7]-'0')*10+(s2[8]-'0'));
        if(strlen(add1+1)==4) h1+=(add1[3]-'0')*24;
        if(strlen(add2+1)==4) h2+=(add2[3]-'0')*24;
        return ;
    }
    void solve(){
        ans=h1*3600+m1*60+se1+h2*3600+m2*60+se2;
        ans/=2;
        ansh=ans/3600;
        ans%=3600;
        ansm=ans/60;
        ans%=60;
        anss=ans;
        return ;
    }
    char a[10006],b[10006];
    void init(){
        gets(a+1),gets(b+1);
        memset(add1,0,sizeof(add1));
        memset(add2,0,sizeof(add2));
        for(int i=1;i<=8;i++) s1[i]=a[i];
        for(int i=10;i<=17;i++) e1[i-9]=a[i];
        for(int i=19;i<=strlen(a+1);i++) add1[i-18]=a[i];
        for(int i=1;i<=8;i++) s2[i]=b[i];
        for(int i=10;i<=17;i++) e2[i-9]=b[i];
        for(int i=19;i<=strlen(b+1);i++) add2[i-18]=b[i];
        ans=0;
        return ;       
    }
    void output(){
        if(ansh<10) printf("0%d",ansh);
        else printf("%d",ansh);
        if(ansm<10) printf(":0%d",ansm);
        else printf(":%d",ansm);
        if(anss<10) printf(":0%d",anss);
        else printf(":%d",anss);
        puts("");
        return ;
    }
    int main(){
        n=rd();
        while(n--){
            init();
            change();
            solve();
            output();
        }
        return 0;
    }
    蒟蒻总是更懂你✿✿ヽ(°▽°)ノ✿
  • 相关阅读:
    [React Hooks长文总结系列三]为所欲为,制作“穷人版”的redux
    [React Hooks长文总结系列二]渐入佳境,性能调优与自定义钩子
    [React Hooks长文总结系列一]初出茅庐,状态与副作用
    EsModule VS CommonJS
    [清代八股文]Promise如何实现串行执行
    React Fiber基本工作原理
    深入剖析setState同步异步机制
    破译《碟中谍》经典画面,解密指纹验证+刷脸!
    如何测试重签名的应用功能是否正常
    图像处理之滤镜、图文排版的开发详解,从入门到起飞
  • 原文地址:https://www.cnblogs.com/WWHHTT/p/9821727.html
Copyright © 2011-2022 走看看