原始问题:
小红结算饭钱:分摊账单的整数化处理
需要转给小红多少钱。
可以使用以下Java代码实现:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 账单数
int m = scanner.nextInt(); // 除小红外的总人数
// 创建一个HashMap用于记录每个人需要转给小红的钱数
HashMap<Integer, Integer> moneyMap = new HashMap<>();
// 初始化每个人的钱数为0
for (int i = 1; i <= m; i++) {
moneyMap.put(i, 0);
}
// 处理每张账单
for (int i = 0; i < n; i++) {
int k = scanner.nextInt(); // 一起吃饭的人数
int c = scanner.nextInt(); // 花费
// 计算每个人需要转给小红的钱数
int perMoney = (int) Math.ceil((double) c / k);
// 除小红外的人需要转给小红的钱数增加
for (int j = 0; j < k - 1; j++) {
int person = scanner.nextInt();
moneyMap.put(person, moneyMap.get(person) + perMoney);
}
}
// 输出每个人需要转给小红的钱数
for (int i = 1; i <= m; i++) {
System.out.print(moneyMap.get(i) + " ");
}
}
}这段代码首先读取输入的账单数n和除小红外的总人数m。然后使用HashMap来记录每个人需要转给小红的钱数,初始值都为0。
接下来,通过循环处理每张账单。对于每张账单,读取一起吃饭的人数k和花费c。然后计算每个人需要转给小红的钱数,使用Math.ceil函数向上取整。最后,将除小红外的人需要转给小红的钱数增加到对应的HashMap中。
最后,输出每个人需要转给小红的钱数。
希望这个代码能够帮助到你!如果有任何问题,请随时提问。
Prev:Java代码实现:小美通过最多k次操作优化数组元素总和