5-2 时间模拟

给出下面的基类Time的框架如下:

class Time

{
protected:

    int second;
    int minute;
    int hour;

public:

     void operator++();
     void operator--();

}

建立一个派生类Time_12hours,用于表示十二进制时间,增加以下成员数据:

string type;//标识为12进制时间,type=”12-hours-time”

string interval;//标识为AM或者PM,interval=”AM”或interval=”PM”

增加以下成员函数: void operator++();

     void operator--();

建立一个派生类Time_24hours,用于表示二十四进制时间,增加以下成员数据:

     string type;//标识为24进制时间,type=”24-hours-time”

增加以下成员函数:

     void operator++();

     void operator--();

生成上述类并编写主函数,根据输入的初始时间信息、自增或者自减类型、自增或者自减次数,输出其最后时间信息。

输入格式:测试输入包含多个测试用例,一个测试用例为一行,每行共五个数字,第一个数字为进制,121表示输入为12进制AM时间,122表示输入为12进制PM时间,输入为24表示输入为24进制时间,第二个数字为hour,第三个数字为minute,第四个数字为second,第五个字符为运算类型,+表示自增,-表示自减,第六个数字为运算次数,0表示测试用例结束。

输入样例:

121 11 59 59 + 3

24 11 59 59 + 3

122 11 59 59 + 3

122 00 00 00 - 3

121 00 00 00 - 5

24 00 00 00 - 1

0

输出样例:

PM 00:00:02

12:00:02

AM 00:00:02

AM 11:59:57

PM 11:59:55

23:59:59

参考代码:

#include<iostream>
#include<iomanip>
using namespace std;
//建立Time基类
class Time{
protected:
    int second;
    int minute;
    int hour;
    int total;
public:
     void operator ++ ();
     void operator -- ();
     friend istream& operator >>(istream& , Time& );
};
istream& operator >> (istream& set, Time& x){
    set>> x.hour>> x.minute>> x.second;
    x.total = (x.hour*60+ x.minute)*60 + x.second;
    return set;
}
void Time::operator ++(){
    total++;
    second = total%60;//对60秒取余数
    minute = total/60%60;//换为分对60分取余数
    hour = total/3600%24;//换为小时对24小时取余数
}
void Time::operator --(){
    if(total==0) total=86400;//到前一天,保证sum大于零
    total--;
    second = total%60;
    minute = total/60%60;
    hour = total/3600%24;
}
//建立Time_12hours
class Time_12hours:public Time{
private:
    string type;//12-hours-time
    string interval;//AM ro PM1
public:
    void set(int x){if(x == 122) total += 43200;};
    void operator --(){Time::operator --();};
    void operator ++(){Time::operator ++();};
    friend ostream& operator <<(ostream& ,Time_12hours &);
};
ostream& operator <<(ostream& put,Time_12hours &x)
{
    x.type="12-hours-time ";
      if(x.hour>=12)
      {
        x.interval="PM ";
        x.hour-=12;
    }
       else
       {
         x.interval="AM ";
    }

    put <<x.interval
        <<setiosflags(ios::right)<<setfill(‘0‘)
        <<setw(2)<<x.hour<<":"
        <<setw(2)<<x.minute<<":"
        <<setw(2)<<x.second<<endl;
}
//建立Time_24hours
class Time_24hours:public Time{
    string type;
public:
    void operator ++(){Time::operator ++();};
    void operator --(){Time::operator --();};
    friend ostream& operator <<(ostream& , Time_24hours &);
};
ostream& operator <<(ostream& put, Time_24hours& x){
    put <<setiosflags(ios::right)<<setfill(‘0‘)
        <<setw(2)<<x.hour<<":"
        <<setw(2)<<x.minute<<":"
        <<setw(2)<<x.second<<endl;
}
int main(){
    Time_12hours t12;
    Time_24hours t24;
    int type;
    char flag;
    int n;
    while( cin>>type )
    {
        if( type == 0 )break;
        else if( type >100 )
        {
            cin>>t12;
            t12.set(type);
            getchar();
            cin>>flag>>n;

            if(flag==‘+‘)
                while(n--)
                    ++t12;
            else
                while(n--)
                    --t12;
            cout<<t12;
        }
        else
        {
            cin>>t24;
            getchar();
            cin>>flag>>n;
            if(flag == ‘+‘)
                while(n--)
                    ++t24;
            else
                while(n--)
                    --t24;
            cout<<t24;
        }
    }
    return 0;
}
 

欢迎指教,一起学习!

未经本人允许,请勿转载!

谢谢!

时间: 2024-10-07 06:00:10

5-2 时间模拟的相关文章

Codeforces 452D [模拟][贪心]

题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的衣服或者烘干的衣服较多来不及进行下一个步骤,则从一开始就顺延洗衣服的时间,贪心的思想也是体现在这里. 3.关键在于烘干衣服的顺延如何处理,因为需要调整洗衣服的起始时间,其实我们只要对烘干衣服的时间进行顺延处理就可以了,因为即使没有调整洗衣服的起始时间,那么下次到了烘干衣服的时间的时候因为烘干衣服的数

hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1751    Accepted Submission(s): 628 Problem Description 世界上最遥远的距离 不是生与死 而是我就站在你面前 你却不知道我爱你 世界上最遥远的距离 不是我就站在你面前你却不知道我爱你 而是明明知道彼此相爱

LoadRunner几个重要的概念:事务、集合点、思考时间

在LoadRunner的脚步编写中,有三个重要的概念:事务.集合点.思考时间 事务: 事务又称为Transaction,在LoadRunner中的定义如下:An end-to-end(browser-to-browser)  measurement of one or more user actions within action  file.中文理解如下:事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义

简单模拟医院叫号系统

以前有个习惯就是发现一些生活的系统,总会大概想想自己开发到底怎么实现.有的可能就在脑海里面过一下思路,有的则会写个简单的demo验证一下自己的思路是否可行. 笔者前段时间在医院等候,仔细观察了一下叫号系统.于是有了想自己写一个简单的叫号系统. 用例大致如下: 每个诊室的医生登录系统,都可以叫号,不能重复叫号,也不能跳号,顺序递增 每个医生看病的速度不一样,线程需要睡眠一个随机时间模拟医生看病时间 每个医生登录时间不一样,每次叫号都是基于最新的当前号码 某个医生看病的时候,其它医生正常叫号 某个医

队列应用——循环分配器、银行服务模拟

1.循环分配器 为在客户群体中共享某一资源(比如多个应用程序共享同一CPU),可以借助队列Q实现一个资源循环分配器. RoundRobin{//循环分配器 Queue Q(clients);//参与资源分配的所有客户组成队列Q while(!serviceClosed()){//在服务关闭之前,反复地 e=Q.dequeue();//对首的客户出队,并 serve(e);//接受服务,然后 Q.enqueue(e);//重新入队 } } 在以上轮值算法中,首先令所有参与资源分配的客户组成一个队列

CPPU程序设计训练营清明天梯模拟赛题解

感谢大家今天来做题 比赛地址:http://202.206.177.79/contest/8 由于博主比较菜,没做完所有题目,这里暂时仅提供前两部分的题解. 为了节约篇幅,题目及数据描述不再赘述,如有需求,请移步OJ查看. 感谢大家的辛苦付出,但是从这次比赛的结果来看,前行之路还非常非常漫长呐. 我寂寞的时候,会害怕踏出第一步.不会想到要去做什么事,所以,可能没有发觉很多很多的东西吧.--<夏目友人帐> 第一阶段 L1-1 天梯赛座位分配 (20分) 通过率:2.56% \(\;\;\) 通过

8.22 今日头条笔试

这次套路深啊,怎么还有改错题!. 上来看题,每个题目的输入数据都很大,果断上scanf,printf, 千万不能用cin,cout 1. 右上角的点,我的思路是先对每一行去重(题目好像说没有重的点耶!),每一行只有最右边的点才是候选点,然后对这些候选点按照y坐标,从大到小访问,要求相应的x是严格递增的,最后打印输出. 1 #include<bits/stdc++.h> 2 #define pb push_back 3 typedef long long ll; 4 using namespac

用汇编语言给XP记事本添加“自动保存”功能 good

[文章标题]: 用汇编语言给XP记事本添加“自动保存”功能 [文章作者]: newjueqi [作者邮箱]:[email protected] [作者QQ]:190678908 [使用工具]: OD, LordPE,eXeScope[操作平台]: XP-SP2[作者声明]: 本人平时一般的文字处理都是用记事本(用Word好像大材小用了),电脑自从拿去大修后有时候会莫名其妙的重启,弄得经常重写(本人常常忘记保存^-^),于是想给记事本增加类似于Word的自动保存功能,以图个方便.失误之处敬请诸位大

网络游戏中的(低精度)时间同步

对于网络游戏来说,从物体的移动.攻击到最基础的计时等等,都需要客户端与服务器保持时间的相对一致,那么服务器与客户端同步便是一个必须要解决的问题.通常,网络游戏都会利用心跳来进行同步,那么当客户端并不需要如此精度的同步时,有没有其他方法呢?这里主要讨论低精度的时间同步(精确到秒). 工作中接触过3种简单的时间同步方法: 首先,定义时间同步类 /// 32位操作系统 typedef unsigned int64_t QWORD; typedef unsigned long DWORD; class