停车费

Car Parking fee

我们的代码包含 3 个阶段

第 1 阶段 - 在停车场,最多 5 小时的费用为 1 美元。

第 2 阶段 - 5 小时后,下降到每小时 0.50 美元。如果车在园区停留6小时,费用为$5.50。

第 3 阶段 - 考虑到第一和第二阶段,每天的费用为 14.50 美分。但是我们必须把每天的费用固定为15美元。如果车在公园停留25小时,价格应该是15.50,而不是15美元。

我在上面写了第 1 阶段和第 2 阶段,如您在代码块中所见。不过日费写不出来,是第三阶段.

fun main(args: Array<String>) {
  
    var hours = readLine()!!.toInt()
    var total: Double = 0.0
    var price = 0.0
    if (hours <= 5) {
        price= 1.0
        total = hours * price
        println(total)

    } else if (hours>=6) {
        price= 0.5
        total=hours*price-2.5+5.0
        println(total)

    }

}

你应该从最严格的部分开始你的“if”序列。

total = 0
if (hours >= 24) {
    // number of days
    days = int(hours / 24)
    price = 15
    total = days * price
    // excess of hours rated at 0.5 / hour
    hours = hours % 24
    price = 0.5
    total += hours * price
} else if hours >= 6 {
    price = 0.5
    total = (hours - 5) * price + 1
} else {
    // 5 or less hours
    total = 1
}

你应该从大块开始,第 3 阶段。

我更愿意避免将代码分支得比数学问题所需的更深。您可以对单个变量声明使用 if/when,但将所有贡献者保留在一个最终方程中,对不会贡献的变量使用 0。我认为这使代码更易于理解且重复性更少。

余数运算符 % 对此类问题很有用。

fun main() {
    val totalHours = readLine()!!.toInt()

    val days = totalHours / 24 // Number of complete days charged at daily rate
    val hours = totalHours % 24 // The remainder is hours charged at hourly rate

    // Hours up to five cost an additional 0.5 of hourly rate
    val higherRateHours = when {
        days > 0 -> 0 // Don't charge the high hourly rate because already covered within first day
        else -> totalHours.coerceAtMost(5)
    }

    val total = days * 15.0 + hours * 0.5 + higherRateHours * 0.5
    println(total)
}