蓝桥杯 算法提高 c++

    xiaoxiao2021-03-25  113

    算法提高 c++_ch04_02_修正版   时间限制:1.0s   内存限制:256.0MB   【题目描述】   实现一个时间类Time。将小时,分钟和秒存储为int型成员变量。要求该类中包含一个构造函数,访问用的函数,一个推进当前时间的函数adv(),一个重新设置当前时间(即将当前时间设为00:00:00)的函数reset()和输出结果函数print()。注意时间按数字式电子表格式显示,即小时、分、秒分别用两位表示,如果其中之一小于10,则前方补0,如22:01:00(中间不含空格),另外按该格式依次输出时、分、秒后,以endl结尾。当输入时间超出合法范围(提示:注意上下界)时,请自动按照24小时制进行转换,请务必注意时分秒为负值时的处理,如输入25:00:61,则输出应为01:01:01,输入-1:-1:-1,应该输出22:58:59。   第一步:依据题意定义Time类   class Time   {   // 请补充   };   第二步:利用如下测试程序对所编写的Time类进行测试。   int main()   {   // 当前时间   int hour, minute, second;   // 时间增量   int incr_hr, incr_min, incr_sec;   cin >> hour >> minute >> second >> incr_hr >> incr_min >> incr_sec;   Time t( hour, minute, second );   t.print();   t.adv( incr_hr, incr_min, incr_sec );   t.print();   t.reset();   t.print();   return 0;   } 输入格式   输入一行,6个int类型数字,以空格间隔。 输出格式   输出三行时间,时间格式为24小时制,xx:xx:xx,英文标点,不足两位十位数补0。   第一行为初始时间,第二行为adv()后的时间,第三行为reset()后的时间 示例1输入   0 0 0 0 0 -1 示例1输出   00:00:00   23:59:59   00:00:00   示例3: 示例2输入   25 63 61 0 0 1 示例2输出   02:04:01   02:04:02   00:00:00 示例3输入   -50 -24 0 50 45 90 示例3输出   21:36:00   00:22:30   00:00:00

    分析:题目看似简单,单却有一个难点,就是时间秒向分钟以及分钟向小时转换的时候略麻烦,得统计是进了多少个单位。负数和正数分开计算。

    附一组测试数据:     输入:-209 217 84 -250 -81 -26    输出   10:38:24     23:16:58      00:00:00

    源代码:

    #include<iostream> using namespace std; class Time { public: Time(int n_hour,int n_minute,int n_second); void print(); void adv(int n_hour,int n_minute,int n_second); void reset(); private: int hour, minute, second;// 请补充 }; Time::Time(int n_hour,int n_minute,int n_second) {//构造函数 hour=n_hour; minute=n_minute; second=n_second; } void Time::print() {//输出函数 if(second>=60||second<0) { if(second>=60) minute+=(second/60),second%=60; else { int cnt=0; while(second<0)cnt++,second+=60; minute-=cnt;second%=60; } } if(minute>=60||minute<0) { if(minute>=60) hour+=(minute/60),minute%=60; else { int cnt=0; while(minute<0)cnt++,minute+=60; hour-=cnt;minute%=60; } } if(hour>=24||hour<0) { if(hour>=24) hour%=24; else { while(hour<0)hour+=24; hour%=24; } } printf("d:d:d\n",hour,minute,second); } void Time::adv(int n_hour,int n_minute,int n_second) {//推进当前时间 hour+=n_hour;minute+=n_minute;second+=n_second; } void Time::reset() {//重置函数 hour=0;minute=0;second=0; } int main() { // 当前时间 int hour, minute, second; // 时间增量 int incr_hr, incr_min, incr_sec; cin >> hour >> minute >> second >> incr_hr >> incr_min >> incr_sec; Time t( hour,minute,second ); t.print(); t.adv(incr_hr,incr_min,incr_sec); t.print(); t.reset(); t.print(); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-20919.html

    最新回复(0)