zoukankan      html  css  js  c++  java
  • 实验4

    Home Web Board ProblemSet Standing Status Statistics
     
    Problem A: 时间类的12小时制输出

    Problem A: 时间类的12小时制输出

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 3479  Solved: 426
    [Submit][Status][Web Board]

    Description

    封装一个时间类Time,用于时间处理的相关功能,支持24小时制和12小时制,支持以下操作:
     
    1. Time::Time()无参构造方法。
    2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象。
    3. Time::Time(const T&)拷贝构造方法。
    4. 成员读函数:
       Time::hour()  :返回Time的小时数;
       Time::minute():返回Time的分钟数;
       Time::second():返回Time的秒数。
    5. 成员写函数:
       Time::hour(int)  :传参修改Time的小时数;
       Time::minute(int):传参修改Time的分钟数;
       Time::second(int):传参修改Time的秒数。
    6. 对象整体读写方法:
       Time::setTime(int,int,int)方法:传递时分秒三个参数修改Time对象的时分秒数。该方法返回修改后的对象。
       Time::setTime(const T&)方法:传递一个参数修改Time对象的时分秒数。该方法返回修改后的对象。
       Time::getTime()方法:返回对象自身的引用。其实,t.getTime()即t。
       仅在Time类中的Time::getTime()方法实在是多余,在组合或者继承关系时才会有机会用到。
    7. Time::inputTime()方法:按格式从标准输入读取数据修改Time对象的时分秒数值。该方法返回修改后的对象。
    8. Time::showTime()方法:输出“hh:mm:ss”,不足两位的要前面补0。如果对象不是合法的时间,则输出“Time error”。
    9. Time::showTime12Hour()方法:输出12小时制的时间:上午输出“hh:mm:ss a.m.”、下午输出“hh:mm:ss p.m.”。如果对象不是合法的时间,则输出“Time error”。注意:该函数仅显示12小时制时间,并不修改对象的数据成员,对象依然存储24小时制时间。
     
    12小时制以数字12、1、2、3、4、5、6、7、8、9、10、11依次序表示每个时段的。
    24小时制的00:00~00:59,是12小时制的12:00 a.m.~12:59 a.m.;
    24小时制的1:00~11:59是十二小时制的1:00 a.m.~11:59 a.m.。
    24小时制的12:00~12:59,是12小时制的12:00 p.m.~12:59 p.m.;
    24小时制的13:00~23:59是十二小时制的1:00 p.m.~11:59 p.m.。
     
    你设计一个时间类Time,使得main()函数能够正确运行。
     
    函数调用格式见append.cc。
     
    append.cc中已给出main()函数。main()函数内容稍微繁复,仅为测试对象的各种调用情况。
     

    Input

    输入的第一个整数n,表示有n组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在int范围内。
     

    Output

    开始部分为由main()函数产生的固定输出,用于测试对象的某些方法的调用情况。输出“Test data output :”之后为测试数据对应的输出:
     
    每组测试数据对应一组输出,奇数行的输入对应输出24小时制时间“hh:mm:ss”,偶数行的输入对应输出12小时制时间:上午输出“hh:mm:ss a.m.”、下午输出“hh:mm:ss p.m.”,不足两位的输出需要前面补0。如果输入的时间不合法,则输出“Time error”。格式见sample。
     

    Sample Input

    6 0 0 1 0 59 59 1 1 60 23 0 0 23 59 59 24 1 0

    Sample Output

    Constant test output : 11:59:58 a.m. 12:00:01 p.m. 11:59:58 12:00:01 Test data output : 00:00:01 12:59:59 a.m. Time error 11:00:00 p.m. 23:59:59 Time error

    HINT

    输出格式用头文件<iomanip>中流操作算子:
    setw(w)   :设置数据的输出宽度为w个字符
    setfill(c):设置用字符c作为填充字符

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Time{
    private:
        int h,m,s;
    public:
        Time():h(0),m(0),s(0){}
        Time(int hh,int mm,int ss):h(hh),m(mm),s(ss){}
        Time(const Time& T){h=T.h;m=T.m;s=T.s;}
    
        int hour()const{return h;}
        int minute(){return m;}
        int second(){return s;}
    
        int hour(int hh){h=hh;return h;}
        int minute(int mm){m=mm;return m;}
        int second(int ss){s=ss;return s;}
    
        Time &setTime(int hh,int mm,int ss){h=hh;m=mm;s=ss;return *this;}
        Time &setTime(const Time& T){h=T.h;m=T.m;s=T.s;return *this;}
        Time &getTime(){return *this;}
    
        Time &inputTime(){cin>>h>>m>>s;return *this;}
        void showTime()const
        {
           if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0) cout<<"Time error"<<endl;
           else cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<endl;
        }
        void showTime12Hour()const
        {
            if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0)
            cout<<"Time error"<<endl;
            else {
                if(h==0)
            {
                int a=hour();
                a=a+12;
                cout<<setw(2)<<setfill('0')<<a<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" a.m."<<endl;
            }
            else if(h>0&&h<12)
            {
                cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" a.m."<<endl;
            }
            else if(h==12)
            {
                cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" p.m."<<endl;
            }
            else if(h>12&&h<24)
            {
                int b=hour();
                b=b-12;
                cout<<setw(2)<<setfill('0')<<b<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" p.m."<<endl;
            }
            }
    
        }
    };
    
    int main()
    {
        cout<<"Constant test output :"<<endl;
        const Time c(11, 59, 58);
        const Time cc(12, 0, 1);
        c.showTime12Hour();
        cc.showTime12Hour();
        c.showTime();
        cc.showTime();
    
        cout<<"
    Test data output :"<<endl;
        Time t;
        int cases;
        cin>>cases;
        for(int i = 1; i <= cases; ++i)
        {
            if(i % 4 == 0)
            {
                int hour, minute, second;
                cin>>hour>>minute>>second;
                Time tt(hour, minute, second);
                tt.showTime12Hour();
            }
            if(i % 4 == 1)
            {
                int hour, minute, second;
                cin>>hour>>minute>>second;
                t.setTime(hour, minute, second).showTime();
            }
            if(i % 4 == 2)
                t.inputTime().showTime12Hour();
            if(i % 4 == 3)
            {
                int hour, minute, second;
                cin>>hour>>minute>>second;
                t.hour(hour);
                t.minute(minute);
                t.second(second);
                t.showTime();
            }
        }
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem B: 时间类的静态成员计数

    Problem B: 时间类的静态成员计数

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 1969  Solved: 423
    [Submit][Status][Web Board]

    Description

    封装一个时间类Time,用于时间处理的相关功能,支持以下操作:
     
    1. Time::Time()无参构造方法。
    2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象。
    3. Time::Time(const T&)拷贝构造方法。
    4. 对象整体读写方法:
       Time::setTime(int,int,int)方法:传递时分秒三个参数修改Time对象的时分秒数。该方法返回修改后的对象。
       Time::setTime(const T&)方法:传递一个参数修改Time对象的时分秒数。该方法返回修改后的对象。
       Time::getTime()方法:返回对象自身的引用。其实,t.getTime()即t。
       仅在Time类中的Time::getTime()方法实在是多余,在组合或者继承关系时才会有机会用到。
    5. Time::showTime()方法:输出“hh:mm:ss”,不足两位的要前面补0。如果对象不是合法的时间,则输出“Time error”。
    6. 静态成员方法:
       Time::getNumber()方法:返回程序中已创建的Time对象总数。
       Time::displayNumber()方法:输出程序中已创建的Time对象总数。
     
    注意:在用Time对象传递参数时应传对象的引用而不是直接传对象,返回对象时同样返回引用,以免产生多余的对象拷贝。多余的拷贝构造会引起对象计数的错误。
     
    你设计一个时间类Time,使得main()函数能够正确运行。
     
    函数调用格式见append.cc。
     
    append.cc中已给出main()函数。main()函数内容稍微繁复,仅为测试对象的各种调用情况。
     

    Input

    输入为多行,每行为一组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在int范围内。
     

    Output

    开始部分为由main()函数产生的固定输出,用于测试对象的某些方法的调用情况。输出“Test data output :”之后为测试数据对应的输出:
     
    每组测试数据对应一组输出“hh:mm:ss”,不足两位的输出需要前面补0。如果输入的时间不合法,则输出“Time error”。格式见sample。
     
    最后一行输出一个整数n,表示有n组测试数据输入。
     

    Sample Input

    0 0 1 0 59 59 1 1 60 23 0 0 23 59 59 24 1 0

    Sample Output

    Static member test output : Now, There is 0 object of Time. Now, There is 1 object of Time. There was a call to the copy constructor : 0,0,0 Now, There is 2 object of Time. Now, There is 3 object of Time. There was a call to the copy constructor : 1,2,3 Now, There is 4 object of Time. Test data output : 00:00:01 00:59:59 Time error 23:00:00 23:59:59 Time error 6

    HINT

     

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Time{
    private:
        int h,m,s;
        static int sum;
    public:
        Time():h(0),m(0),s(0){sum++;}
        Time(int hh,int mm,int ss):h(hh),m(mm),s(ss){sum++;}
        Time(const Time& T){h=T.h;m=T.m;s=T.s;sum++;cout<<"There was a call to the copy constructor : "<<T.h<<","<<T.m<<","<<T.s<<endl;}
    
        int hour()const{return h;}
        int minute(){return m;}
        int second(){return s;}
    
        int hour(int hh){h=hh;return h;}
        int minute(int mm){m=mm;return m;}
        int second(int ss){s=ss;return s;}
    
        Time &setTime(int hh,int mm,int ss){h=hh;m=mm;s=ss;return *this;}
        Time &setTime(const Time& T){h=T.h;m=T.m;s=T.s;return *this;}
        Time &getTime(){return *this;}
    
        void showTime()const
        {
           if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0) cout<<"Time error"<<endl;
           else cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<endl;
        }
    
        void showTime12Hour()const
        {
            if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0)
            cout<<"Time error"<<endl;
            else {
                if(h==0)
            {
                int a=hour();
                a=a+12;
                cout<<setw(2)<<setfill('0')<<a<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" a.m."<<endl;
            }
            else if(h>0&&h<12)
            {
                cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" a.m."<<endl;
            }
            else if(h==12)
            {
                cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" p.m."<<endl;
            }
            else if(h>12&&h<24)
            {
                int b=hour();
                b=b-12;
                cout<<setw(2)<<setfill('0')<<b<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<" p.m."<<endl;
            }
            }
    
        }
    
        static int getNumber(){return sum;}
        static void displayNumber(){cout<<"Now, There is "<<sum<<" object of Time."<<endl;}
    };
    int Time::sum=0;
    
    int main()
    {
        cout<<"Static member test output :"<<endl;
        Time::displayNumber();
        Time t;
        t.displayNumber();
        Time tt(t);
        tt.displayNumber();
        Time ttt(1, 2, 3);
        ttt.displayNumber();
        Time tttt(ttt.getTime());
        tttt.displayNumber();
        int non_cases = Time::getNumber();
    
        cout<<"
    Test data output :"<<endl;
        int hour, minute, second;
        while(cin>>hour>>minute>>second)
        {
            Time t;
            t.setTime(hour, minute, second).showTime();
        }
        cout<<t.getNumber() - non_cases<<endl;
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem C: 时间类的加、减法赋值运算

    Problem C: 时间类的加、减法赋值运算

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 3588  Solved: 1483
    [Submit][Status][Web Board]

    Description

    封装一个时间类Time,在类上重载以下运算符,使得main()函数能够正确运行。
     
    1. Time::Time()无参构造方法。
    2. Time::inputTime()方法:按格式从标准输入读取数据修改Time对象的时分秒数值。该方法返回修改后的对象。
    3. Time::showTime()方法:输出“hh:mm:ss”,不足两位的要前面补0。如果对象不是合法的时间,则输出“Time error”。
    4. 运算符
    加法赋值运算符“ldquo;+=”和减法赋值运算符“-=”:把一个整数m加到Time对象自身,并且仅对合法的时间操作,不会产生不合法的时间,比如:
    若原时间对象为“00:00:00”,减去2后的对象为“23:59:58”;
    若原时间对象为“23:59:59”,加上1后的对象为“00:00:00”;
    若原时间对象为“24:60:60”,加减后的对象仍为“24:60:60”
     
    函数调用格式见append.cc。
     
    append.cc中已给出main()函数
     

    Input

    输入的第一个整数n,表示有n组测试数据,每组4个整数,前三个整数为:hh,mm,ss,分别表示时、分、秒,其值都在int范围内,最后一个整数为m。
     

    Output

    每个输入对应两行输出,分别为时间“hh,mm,ss”加上m秒和减去m秒后的值。错误的时间输出“Time error”
     

    Sample Input

    6 0 0 1 2 0 59 59 1 1 1 60 10 23 0 0 60 23 59 59 100 24 1 0 3

    Sample Output

    00:00:03 23:59:59 01:00:00 00:59:58 Time error Time error 23:01:00 22:59:00 00:01:39 23:58:19 Time error Time error

    HINT

    输出格式用头文件<iomanip>中流操作算子:
    setw(w)   :设置数据的输出宽度为w个字符
    setfill(c):设置用字符c作为填充字符
    left      :设置输出左对齐
    right     :设置输出优对齐

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Time{
    private:
        int h,m,s,sss;
    public:
        Time():h(0),m(0),s(0){}
        Time &inputTime(){cin>>h>>m>>s;return *this;}
        void showTime()
        {
           if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0) cout<<"Time error"<<endl;
           else cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<m<<":"<<setw(2)<<s<<endl;
        }
        Time &operator+=(int i)
        {
            if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0)
                return *this;
            else
            {
                sss=(h*3600+m*60+s+i)%(24*3600);
                h=sss/3600;
                m=(sss-h*3600)/60;
                s=sss-h*3600-m*60;
                return *this;
            }
        }
        Time &operator-=(int i)
        {
            if(h*3600+m*60+s>=24*3600||m>59||s>59||h<0||s<0||m<0)
                return *this;
            else
            {
                sss=(h*3600+m*60+s-i+24*3600)%(24*3600);
                h=sss/3600;
                m=(sss-h*3600)/60;
                s=sss-h*3600-m*60;
                return *this;
            }
        }
    };
    
    int main()
    {
        int cases;
        cin>>cases;
        for(int i = 1; i <= cases; ++i)
        {
            Time t;
            t.inputTime();
            Time tt(t);
            int num;
            cin>>num;
            t += num;
            t.showTime();
            tt -= num;
            tt.showTime();
        }
    }
    Home Web Board ProblemSet Standing Status Statistics
     
    Problem D: 时间类的流插入、提取和递增、递减运算

    Problem D: 时间类的流插入、提取和递增、递减运算

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 2059  Solved: 863
    [Submit][Status][Web Board]

    Description

    封装一个时间类Time,在类上重载以下运算符,使得main()函数能够正确运行。
     
    流插入操作符“>>”,按照输入格式从标准输入读取三个整数:hh,mm,ss,分别表示时、分、秒,其值在int范围内。
    流提取操作符“<<”;按照“hh:mm:ss”输出Time类的对象,不合法的时间输出“error!!!”。
    前置自增运算符“++”:把时间对象的秒数加1并返回。
    前置自减运算符“--”:把时间对象的秒数减1并返回。
    后置自增运算符“++”:把时间对象的秒数加1,返回原值。
    后置自减运算符“--”:把时间对象的秒数减1,返回原值。
     
    以上4个自增、自减仅对合法的时间操作,并且不会产生不合法的时间。比如:
    若原时间对象为“00:00:00”,自减运算后的对象为“23:59:59”;
    若原时间对象为“23:59:59”,自增运算后的对象为“00:00:00”;
    若原时间对象为“24:60:60”,自增或自减运算后对象仍为“24:60:60”。
     
    函数调用格式见append.cc。
     
    append.cc中已给出main()函数
     

    Input

    输入的第一个整数n,表示有n组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在int范围内。
     

    Output

    输出一张表:每列8个字符宽,两列之间有一个空格。
     
    首先,输出一个表头:“++t      --t      t        t--      t++      t       ”,
     
    其次,对应每组测试数据在一行内依次以下内容:
    前置++、前置--、原值、后置--、后置++、原值。
    若输入的日期合法,输出格式为“hh:mm:ss”,不足两位的输出需要前面补0。如果输入的时间不合法,则输出“error!!!”。格式见sample。
     

    Sample Input

    6 0 0 1 0 59 59 1 1 60 23 0 0 23 59 59 24 1 0

    Sample Output

    ++t --t t t-- t++ t 00:00:02 00:00:01 00:00:01 00:00:01 00:00:00 00:00:01 01:00:00 00:59:59 00:59:59 00:59:59 00:59:58 00:59:59 error!!! error!!! error!!! error!!! error!!! error!!! 23:00:01 23:00:00 23:00:00 23:00:00 22:59:59 23:00:00 00:00:00 23:59:59 23:59:59 23:59:59 23:59:58 23:59:59 error!!! error!!! error!!! error!!! error!!! error!!!

    HINT

    输出格式用头文件<iomanip>中流操作算子:
    setw(w)   :设置数据的输出宽度为w个字符
    setfill(c):设置用字符c作为填充字符
    left      :设置输出左对齐
    right     :设置输出优对齐

    Append Code

    [Submit][Status][Web Board]
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class Time{
    private:
        int h,m,s,sss;
    public:
        friend istream &operator>>(istream &is,Time &T)
        {
            is>>T.h>>T.m>>T.s;
            if(T.h>23||T.h<0||T.m>59||T.m<0||T.s>59||T.s<0)
            T.sss=1;
            else T.sss=0;
    
            return is;
        }
    
    //    friend ostream &operator<<(ostream &os,Time T);
        friend ostream &operator<<(ostream &os,const Time &T)
        {
        if(T.h*3600+T.m*60+T.s>=24*3600||T.h<0||T.s<0||T.m<0||T.m>59||T.s>59) {os<<"error!!!";}
        else {os<<setw(2)<<setfill('0')<<T.h<<":"<<setw(2)<<T.m<<":"<<setw(2)<<T.s;}
        return os;
        }
        Time& operator++()
        {
            if(h*3600+m*60+s>=24*3600||h<0||s<0||m<0||m>59||s>59)
                return *this;
            else
            {
                sss=((h*3600+m*60+s)+1)%(24*3600);
                h=sss/3600;
                m=(sss-h*3600)/60;
                s=sss-h*3600-m*60;
                return *this;
            }
        }
        Time& operator--()
        {
            if(h*3600+m*60+s>=24*3600||h<0||s<0||m<0||m>59||s>59)
                return *this;
            else
            {
                sss=((h*3600+m*60+s)-1+24*3600)%(24*3600);
                h=sss/3600;
                m=(sss-h*3600)/60;
                s=sss-h*3600-m*60;
                return *this;
            }
        }
        Time operator++(int)
        {
            Time t=(*this);
            if(h*3600+m*60+s>=24*3600||h<0||s<0||m<0||m>59||s>59)
                return t;
            else
            {
                sss=((h*3600+m*60+s)+1)%(24*3600);
                h=sss/3600;
                m=(sss-h*3600)/60;
                s=sss-h*3600-m*60;
                return t;
            }
        }
        Time operator--(int)
        {
            Time t=(*this);
            if(h*3600+m*60+s>=24*3600||h<0||s<0||m<0||m>59||s>59)
                return t;
            else
            {
                sss=((h*3600+m*60+s)-1+24*3600)%(24*3600);
                h=sss/3600;
                m=(sss-h*3600)/60;
                s=sss-h*3600-m*60;
                return t;
            }
        }
    };
    
    
    int main()
    {
        Time t;
        int cases;
        cin>>cases;
        cout<<setw(8)<<left<<"++t"<<" ";
        cout<<setw(8)<<left<<"--t"<<" ";
        cout<<setw(8)<<left<<"t"<<" ";
        cout<<setw(8)<<left<<"t--"<<" ";
        cout<<setw(8)<<left<<"t++"<<" ";
        cout<<setw(8)<<left<<"t"<<right<<endl;
        for(int i = 1; i <= cases; ++i)
        {
            cin>>t;
            cout<<(++t)<<" ";
            cout<<(--t)<<" ";
            cout<<t<<" ";
            cout<<t--<<" ";
            cout<<t++<<" ";
            cout<<t<<endl;
        }
    }
  • 相关阅读:
    【Javascript】javascript学习 二十二 JavaScript 对象简介
    【Javascript】javascript学习 二十六 JavaScript Boolean(逻辑)对象
    【Javascript】javascript学习 二十九 JavaScript HTML DOM 对象
    【Javascript】javascript学习 二十八 JavaScript RegExp 对象
    【Javascript】javascript学习 二十一 JavaScript 指导方针
    【Javascript】javascript学习 二十三 JavaScript 字符串(String)对象
    【Javascript】javascript学习 三十 JavaScript 浏览器检测
    【Javascript】javascript学习 二十五 JavaScript Array(数组)对象
    【Javascript】javascript学习 二十四 JavaScript Date(日期)对象
    【Javascript】javascript学习 二十七 JavaScript Math(算数)对象
  • 原文地址:https://www.cnblogs.com/auto1945837845/p/5513505.html
Copyright © 2011-2022 走看看