2016-11-09 52 views
0

我有一個問題解決停車場收費

停車費是每小時3 $前3小時,每個額外小時你會被收取$ 1小時和24小時爲$ 30,但你可以留超過24小時。 我不知道如何解決24小時以上,如果汽車在那裏停留37小時或更長時間。我認爲模數必須用於這個,不幸的是我不能得到這個工作。任何幫助?

 if (hours >= 24) { 
      price = 30; 
      price += (hours - 3) % 1; //should the mod even go here? 
     } else if (hours < 24 && hours > 3) { 
      price = 9; 
      price += (hours - 3) * 1; 
     } else { 
      price = hours * 3; 
     } 
     System.out.println("Hours: " + hours + " Price: " + price); 
+2

如何計費工作超過24小時?如果他們在那裏呆了37個小時,那麼是30美元加上17小時@每小時1美元? – BlackHatSamurai

+0

24小時後它仍然只是每小時1美元?如果是這樣,那麼「24」部分似乎完全不相關。前三個小時是一回事,剩下的時間是另一回事。當前代碼失敗的方式是什麼? – David

+0

例如25小時停留應該給33美元的價格$ – tomaszsvd

回答

1

這工作:

if (hours >= 24) { 
    price = (hours/24)*30; 
    int h = hours%24; 
    int h4 = Math.min(h, 3)*2; 
    price += h4 +((hours)%24); 

} else if (hours < 24 && hours > 3) { 
    price = 9; 
    price += (hours - 3) * 1; 
} else { 
    price = hours * 3; 
} 
System.out.println("Hours: " + hours + " Price: " + price); 
+0

沒有在24小時後仍然3美元的前3小時和3小時後其1美元 – tomaszsvd

+0

但請注意,3 $ * 3小時後是30美元,所以仍然有效。 – ItamarG3

+0

24小時30美元,但你可以停留24小時以上。因此,24小時停留= 30美元,然後25小時停留= 33美元,26小時停留= 36美元,27小時停留= 39美元,那麼它每小時額外收取1美元,直到達到48小時價格爲60美元等等 – tomaszsvd

0
if(hours > 0) { 
    if(hours > 3 && hours < 24) { 
    price = 3 + hours; 
    } 
    if(hours >= 24) { 
    price = 30; 
    } 
} 

注意,如果該人停車仍然得到1 $每小時然後在24小時後收費:根據您的具體要求

if(hours > 0) { 
    if(hours > 3 && hours < 24) { 
    price = 3 + hours; 
    } 
    if(hours >= 24) { 
    price = 30 + hours - 24; 
    } 
} 
3

,它應該如此簡單:

price = Math.min(hours, 3) * 3 + Math.max(hours - 3, 0) * 1; 
    System.out.println("Hours: " + hours + " Price: " + price); 

更新:

price = (hours/24) * 30 + Math.min(hours % 24, 3) * 3 + Math.max(hours % 24 - 3, 0) * 1; 
+1

當小時> 24時,這不會給出正確的價格.24小時後,再加上前3小時爲每小時3美元和1美元! –

1

修改@ bohuss的解決方案來解決這個問題24h以上,:

private static int calculatePrice(final int hours) { 
    // find number of days [where 1 day is 24 hours] 
    final int days = hours/24; 
    // calculate price based on 1 day's fixed price as $30 
    int price = 30 * days; 
    // find remaining hours 
    final int remainingHours = hours % 24; 
    // calculate price for remaining hours and add to price for entire days. 
    price += Math.min(remainingHours, 3) * 3 + Math.max(remainingHours - 3, 0) * 1; 
    // return total price 
    return price; 
} 

例輸入/輸出

 
Hours: 0 Price: 0 
Hours: 1 Price: 3 
Hours: 2 Price: 6 
Hours: 3 Price: 9 
Hours: 4 Price: 10 
Hours: 5 Price: 11 
Hours: 6 Price: 12 
... 
Hours: 22 Price: 28 
Hours: 23 Price: 29 
Hours: 24 Price: 30 
Hours: 25 Price: 33 
Hours: 26 Price: 36 
Hours: 27 Price: 39 
Hours: 28 Price: 40 
+0

它看起來像你是正確的:)規範不明確,但計算價格(25)= 33的例子清除了事情 – bohuss