CodeChef装箱问题代码调试求助:编译通过但测试用例结果异常
代码问题排查:Chef打包书籍的最少箱子数计算
有人能告诉我我的代码哪里出问题了吗?它编译正常,但在CodeChef的测试用例中无法给出正确结果。
题目描述
Chef正在搬新家!不幸的是,这意味着他需要打包物品以便搬运。目前,Chef正在将他的藏书装进纸箱。
Chef有X个书架,每个书架恰好有Y本书。每个纸箱最多可容纳Z本书。为了不打乱书籍的整理,Chef确保不同书架的书不会放在同一个箱子里。
在这些条件下,打包所有书籍所需的最少箱子数是多少?
输入格式
第一行输入一个整数T,表示测试用例的数量。
每个测试用例包含一行输入,包含三个空格分隔的整数X、Y和Z:即题目描述中的数值。
输出格式
对于每个测试用例,在新行输出一个整数:所需的最少箱子数。
样例输入输出
输入 输出 5 9 9 5 5 9 7 10 2 3 2 4 22 34 12 66
样例解释
测试用例1:每个箱子可装9本书,每个书架有9本书。因此Chef只需要5个箱子:每个书架一个。
测试用例2:每个箱子可装7本书,每个书架有9本书。因此每个书架需要2个箱子(例如一个装4本,另一个装5本)。共有5个书架,总箱子数为5×2=10。
测试用例3:每个箱子可装2本书,每个书架有3本书。因此每个书架需要2个箱子(例如一个装2本,另一个装1本)。共有2个书架,总箱子数为2×2=4。
测试用例4:每个书架需要3个箱子来装所有书。共有22个书架,因此答案是22×3=66。
我的代码
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); while (1 <= T && T-- <= 100) { int s = sc.nextInt(); int b = sc.nextInt(); int cap = sc.nextInt(); int r = b / cap; int q = r + 1; if (b <= cap) { System.out.println(+s); } else if (b == 0 && s == 0 && cap == 0) { System.out.println(0); } else { System.out.println(q * s) } } }
代码问题分析与修正
你的代码存在以下几个核心问题:
- 循环条件逻辑错误:
while (1 <= T && T-- <= 100)的写法混乱,无法保证遍历所有T个测试用例,会导致部分用例被漏处理。 - 整除场景计算错误:当单书架书籍数
b能被箱子容量cap整除时(比如样例1的9/9=1),你的代码会错误地计算为r+1=2,导致总箱子数翻倍,这是与样例结果不符的关键原因。 - 冗余特殊条件:
b == 0 && s == 0 && cap == 0的判断完全多余,题目输入的书架数、书籍数应为正整数,且该场景也可通过通用逻辑处理。 - 语法疏漏:
System.out.println(q * s)末尾缺少分号,会导致编译失败。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); // 正确遍历所有测试用例 while (T-- > 0) { int shelves = sc.nextInt(); int booksPerShelf = sc.nextInt(); int capacity = sc.nextInt(); // 用整数技巧实现向上取整,同时处理整除和非整除场景 int boxesPerShelf = (booksPerShelf + capacity - 1) / capacity; int totalBoxes = shelves * boxesPerShelf; System.out.println(totalBoxes); } sc.close(); } }
关键改进点
- 使用
(booksPerShelf + capacity - 1) / capacity实现整数向上取整,这是处理“除法向上取整”的通用技巧,能同时正确处理整除(如9/9)和非整除(如9/7)的情况。 - 修正循环条件为
T-- > 0,确保处理所有测试用例。 - 变量名更具可读性,避免混淆。
- 新增Scanner资源关闭操作,养成良好编码习惯。
内容的提问来源于stack exchange,提问作者MOHIT DISAL
相关产品推荐
相关产品推荐

