問題 C 停車計費 迴圈 判斷 時間差值問題

2021-10-14 15:14:56 字數 1577 閱讀 4668

某小區對外來車輛按照如下規則計費: 

半小時內(含半小時),免費;

超過半小時到六小時(含六小時),每小時 2 元,不足一小時以一小時計算;

超過六小時,每小時 5 元,不足一小時以一小時計算。

給定車輛的進入和離開時間(保證沒有跨過一天的零點),請計算應收金額。

第一行:乙個字串,表示車輛進入小區的時間。 

第二行:乙個字串,表示車輛離開小區的時間。

輸入採用「hh:mm:ss」的形式表示時間,其中「hh」表示小時,範圍為 00 到 23,「mm」

表示分鐘,範圍為 00 到 59,「ss」描述秒數,範圍為 00 到 59。時、分、秒均為兩位數。

第一行:表示車輛的停留時間,格式與輸入保持相同。 

第二行:單個整數,表示停車費用。

【樣例1】10:

00:0014:00

:00【樣例2】12:

34:5620:36

:22【樣例3】23:

29:5923:59

:59

【樣例1】04:

00:008

【樣例2】08:

01:2645

【樣例3】00:

30:000

慣例(吐槽):

憨憨本人沒注意到,車輛離開小區時間的分秒比車輛進入小區時間小,以至於需要退位的情況,樣例2怎麼都過不去。

正解:

注意「不足一小時以一小時計算「,即超過六小時過一秒,都算七個小時」

注意」含半小時「」含六小時「,即30:00:00屬於免費,而30:00:01算乙個小時;

思路比較簡單:數字字元通過 - 『0』,可轉換成int型資料,分別計算時,分,秒之間的差值。至於題目條件,我是全部轉化成秒,進行比較。考慮到車輛離開小區時間的分秒比車輛進入小區時間小,以至於需要退位的情況,可通過從小到大借位解決。最後,考慮補0的問題即可

**:

#include

using namespace std;

intmain()

else

int a = h2-h1;

int b = m2-m1;

int c = s2-s1;

//由於存在車輛離開小區時間的分秒比車輛進入小區時間小的情況,b,c有可能為負值,一旦為負值,則向前借位

if(c<0)

if(b<0)

//若差值不足10,則需要在該數字前補0

if(a<10)

cout<<0;

cout<":";

if(b<10)

cout<<0;

cout<":";

if(c<10)

cout<<0;

cout

cout<}

當遇到類似的時間差值問題,可借鑑以上從小到大借位。考慮負值情況。

C 計算時間差

計算比較兩個時間之間的差 計算兩個日期的時間間隔 第乙個日期和時間 第二個日期和時間 private string datediff datetime datetime1,datetime datetime2 timespan常用方法和屬性 add 與另乙個timespan值相加。days 返回用天...

C 獲取時間差

c 獲取兩個時間段之間的差的天數 小時 分鐘 秒 毫秒,主要就是用到timespan,如下 timespan ts datetime.now convert.todatetime 1970 1 1 double time1 ts.totalmilliseconds timespan ts2 date...

oracle計算時間差的問題

之前有個需求是oracle儲存過程中計算兩個時間的時間差,本來以為資料庫中直接相減就可以了,但是經過測試,發現了一點問題。就是總是比預想的值要大1,比如說2月22日,減去2月21日,值竟然是2。然後2月21日減去2月21日,值是1。進一步在pl sql中測試 發現了問題所在,原來是值的精度問題。會把...