2016-11-09 48 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