1. 程式人生 > >藍橋杯-演算法提高-c++_ch04_02_修正版

藍橋杯-演算法提高-c++_ch04_02_修正版

演算法提高 c++_ch04_02_修正版 【題目描述】
  實現一個時間類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
#include<iostream>
using namespace std;

class Time
{
	public:
		Time(int h,int m,int s);
		void adv(int addH,int addM,int addS);
		void reset();
		void print();
    private:
    	int hour,minute,second;
};

Time::Time(int h,int m,int s)
{
	hour=h;
	minute=m;
	second=s;
}
 
void Time::adv(int addH,int addM,int addS)
{
	hour+=addH;
	minute+=addM;
	second+=addS; 
}

void Time::reset()
{
	hour=0;
	minute=0;
	second=0;
}

void Time::print()
{ 
    while(second<0||second>=60||minute<0||minute>=60||hour<0||hour>=24)
    {
	if(second>=60)
	{
	   second=second-60;
	   minute++;
    }
	else if(second<0)
	{
		second=60+second;
		minute--; 
	} 
	if(minute>=60)
	{
	   	minute=minute-60;
	   	hour++;  
	}
	else if(minute<0)
	{
		minute=60+minute;
		hour--;
    } 
	if(hour>23) 
	{
		hour=hour-24; 
	} 	
	else if(hour<0)
	{
		hour=24+hour;
	}
	}  
	if(hour>=0&&hour<=9) 
	   cout<<0<<hour<<":";
	else
	   cout<<hour<<":";
	if(minute>=0&&minute<=9)
	   cout<<0<<minute<<":";
	else
	   cout<<minute<<":";
	if(second>=0&&second<=9)
	   cout<<0<<second<<endl;
	else
	   cout<<second<<endl;
} 

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;
}