📜  hackerrank golang bon appetit (1)

📅  最后修改于: 2023-12-03 15:31:05.618000             🧑  作者: Mango

HackerRank GoLang: Bon Appétit

HackerRank GoLang: Bon Appétit 是一道 HabitRank 平台上关于 Go 语言练习的题目。本题考查了以下知识点:

  • 切片的使用
  • 遍历切片并计算总和
  • 数学运算
  • 条件语句的使用
题目描述

题目链接:https://www.hackerrank.com/challenges/bon-appetit/problem

题目描述:

Anna 和 Brian 前往一家餐厅共进晚餐,账单总额为 $n$。Anna 决定她将支付 $k$ 元,剩余的费用将由 Brian 支付。Brian 热情地同意了。Anna 告诉您菜单项目,其价格已如下所示:

bill = [2, 4, 6, 8]

如果 Anna 选择删除 Brian 的食品账单中的第 $k$ 项,则 Brian 将支付的价格为何?

例如,Anna 把 $bill$ 中的第 2 项删除。 $bill = [2, 6, 8]$ 。她的分摊费用为 $\frac{(2 + 6 + 8)} {2} = 8$,而 Brian 应支付 $4$ 元。如果她没有删除任何项,她将支付 $2 + 4 + 6 + 8 = 20$。 Brian 会为其余菜单项目支付 $\frac{20}{2} = 10$。如果他支付的价格为 $$ 5$ 而不是 $$ 4$,则她将向他支付 $$ 1$。如果他支付得正确,打印 "Bon Appetit"(字面含义:“好胃口”)。否则,打印他应该向她支付多少钱。

请你帮助 Anna 计算应该输出什么内容。

函数接口如下:

// bill: 包含每个项目的整数数组
// k: Anna 清除的项目索引
// b: Anna 实际支付的费用
// 如果 Brian 没有支付错误,则返回“Bon Appetit”,否则返回应支付的金额。
func bonAppetit(bill []int32, k int32, b int32) string {
}
输入格式

第一行包含两个整数 $n$ 和 $k$,分别表示菜单项目数量和 Anna 选择删除的项目索引。

第二行包含 $n$ 个整数,表示每个 $bill_i$ 的值。

第三行包含一个整数 $b$,表示 Anna 实际支付的费用。

输出格式

如果 Brian 没有支付错误,则打印 "Bon Appetit"(字面含义:“好胃口”);否则,打印他应该向她支付多少钱。

样例输入
4 1
3 10 2 9
12
样例输出
5
解题思路

首先,我们需要遍历切片求出总和。遍历切片的方式有多种,本题我们选择使用 Go 语言的 range 关键字来遍历切片。

然后,我们需要根据删除第 $k$ 项后的账单总费用和 Anna 实际支付的费用 $b$ 求出 Brian 需要支付的费用。如果他支付的费用与正确的金额不同,则需要向 Anna 支付差价。

在 Go 中,常用的条件语句有 if-elseswitch-case。本题我们选择使用 if-else 语句来实现。

解题代码
func bonAppetit(bill []int32, k int32, b int32) string {
    var sum int32
    for _, v := range bill {
        sum += v
    }
    sum = (sum - bill[k]) / 2
    if sum == b {
        return "Bon Appetit"
    } else {
        return strconv.Itoa(int(b - sum))
    }
}

在上述代码中,我们使用了 Go语言的 strconv 包将整数转换为字符串返回。返回的字符串格式满足要求,可以直接用于打印。

总结

本题考查了 Go 语言的切片、遍历、数学运算和条件语句等知识点。在解题过程中,我们使用了 Go 语言的 range 关键字遍历切片,使用了 if-else 条件语句判断 Brian 支付的费用是否正确,并使用了 strconv 包将整数转换为字符串。