【问题标题】:Solving the parking lot fees解决停车场收费问题
【发布时间】:2016-11-09 19:15:04
【问题描述】:

我有问题

前 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);

【问题讨论】:

  • 如何在 24 小时内进行计费?如果他们在那里呆了 37 小时,是不是要 30 美元加上 17 小时 @ 每小时 1 美元?
  • 24 小时后仍然是每小时 1 美元吗?如果是这样,那么“24”部分似乎完全无关紧要。前三个小时是一回事,剩下的几个小时又是另一回事。当前代码以什么方式失败?
  • ye 例如 25 小时停留应该给出 33 美元的价格
  • @BlackHatSamurai 完全正确。还要注意 3*$3+(24h-3h)*$1 = $30,那么 24 小时标记真的有什么特别之处吗?
  • 如果您的总停车时间以小时为单位,除以 1 天将得出总天数,前提是您取结果的底数(因为您需要整数)。如果你修改一天,你会得到不计算整天的奇数小时数(如果有的话)。你需要同时使用这两个

标签: java algorithm


【解决方案1】:

根据您的规范,它应该很简单:

    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;

【讨论】:

  • 当小时 > 24 时,这将不会给出正确的价格。24 小时后,前 3 小时再次为 3 美元/小时,每额外一小时 1 美元!
【解决方案2】:

这行得通:

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

【讨论】:

  • 不,24 小时后前 3 小时仍为 3 美元,3 小时后为 1 美元
  • 但是请注意,在 3$*3hours 之后是 30$,所以这仍然有效。
  • 24 小时是 30 美元,但您可以停留超过 24 小时。所以 24 小时住宿 = 30 美元,然后 25 小时住宿 = 33 美元,26 小时住宿 = 36 美元,27 小时住宿 = 39 美元,然后每小时额外花费 1 美元,直到达到 48 小时,价格为 60 美元,依此类推
  • 小时:28 价格:36.0 不幸的是它不起作用,因为 28 小时应该给 40 美元
  • @tomaszsvd 立即尝试
【解决方案3】:

修改@bohuss的解决方案,解决问题超过24小时:

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

输入/输出示例

营业时间:0 价格:0 小时:1 价格:3 小时:2 价格:6 小时:3 价格:9 小时:4 价格:10 小时:5 价格:11 小时:6 价格:12 ... 小时:22 价格:28 小时:23 价格:29 小时:24 价格:30 小时:25 价格:33 小时:26 价格:36 小时:27 价格:39 小时:28 价格:40

【讨论】:

  • 看来你是对的 :) 规范不清楚,但使用 calculatePrice(25)=33 的示例澄清了一切
【解决方案4】:
if(hours > 0) {
  if(hours > 3 && hours < 24) {
    price = 3 + hours;
  }
  if(hours >= 24) {
    price = 30;
  }
}

请注意,如果停车的人在 24 小时后仍按每小时 1 美元收费,那么:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多