c - 长方体中的立方体
问题描述
大家好,
我需要一个 C 程序来计算最小长方体的数量A
,B
以C
容纳N
边长为 的立方体S
,其中1 <= N <= pow(10, 9)
, 1 <= S <= min(A, B, C)
, 1 <= A, B, C <= 1000
。我做了以下事情:
#include <stdio.h>
int main() {
unsigned long long int cubenum, length, boxnum, a, b, c, cpb;
scanf("%llu %llu %llu %llu %llu", &cubenum, &length, &a, &b, &c); getchar();
// how many cubes per box?
cpb = a/length * b/length * c/length;
// how many boxes given the amount of cubes?
boxnum = (cubenum + (cpb - 1)) / cpb;
printf("%llu\n", boxnum);
return 0;
}
给出了以下测试用例:
testcase #1
stdin: 24 4 8 8 8
stdout: 3
testcase #2
stdin: 27 3 8 4 10
stdout: 5
我自己添加了以下测试用例:
testcase #3
stdin: 1 1 1 1 1
stdout: 1
testcase #4
stdin: 1000000000 500 999 999 999
stdout: 1000000000
testcase #5
stdin: 1000000000 499 999 999 999
stdout: 125000000
testcase #6
stdin: 1000000000 2 999 999 999
stdout: 9
我用 Clang 版本 10.0.0-4ubuntu1 编译。给定的测试用例在我的设备上正确通过,而我自己添加的测试用例在手动进行数学运算时似乎是正确的,但是在提交时我的程序被声明为“错误”。不幸的是,没有关于失败的地点、原因或方式的任何反馈。陪审团使用的编译器是未知的,但我过去的经验告诉我它很可能运行 Linux(我尝试使用 Windows 特定的库函数)。因此,我想知道,是否有任何测试用例导致我的代码失败但我没有发现?还是我有其他疏忽?
感谢您的时间。
附带问题:
我怀疑我弄错的部分在这里:
boxnum = (cubenum + (cpb - 1)) / cpb;
我尝试过使用ceil()
in math.h
,但使用double
演员表感觉真的很hacky,然后回到unsigned long long int
,但它确实适用于所有测试用例。我不得不用clang -lm main.c -o main
而不是编译clang main.c -o main
,但它确实运行了。难道陪审团有一个修改后的math.h
库?在另一个程序上,我使用了sqrt()
andpow()
并且它们都被认为是正确的,这告诉我问题不是我怀疑的问题,或者陪审团确实有一个修改后的math.h
库。或者它可能是别的东西?
解决方案
线
cpb = a/length * b/length * c/length;
是错误的,因为这个表达式是从左到右计算的,截断可能不适用于b
and c
。
例如,使用此输入
15 10 100 10 19
该公式将计算如下
a/length * b/length * c/length
= 100/10 * 10/10 * 19/10
= 10 * 10 / 10 * 19 / 10
= 100 / 10 * 19 / 10
= 10 * 19 / 10
= 190 / 10
= 19
因此,您的程序将输出1
因为所需的 15 个立方体可以被 19 个立方体覆盖,而正确的输出是2
因为实际上只能从一个盒子中创建 10 个立方体。
尝试这个:
cpb = (a/length) * (b/length) * (c/length);
推荐阅读
- spring - 弹簧数据存在于某列的所有值中
- oauth-2.0 - 本地交换的 Outlook Web 加载项令牌身份验证失败
- android - 什么 firebase 检查电子邮件有效或不用于新用户注册?
- java - Java套接字:两个换行符比一个换行符快
- javascript - node-nanomsg - 订阅者不接收消息
- powershell - 尝试通过 powershell 安装巧克力时出错:无法连接到远程服务器
- python - 返回字典中的三个最大值
- python-3.x - 如何计算矩阵中的余弦相似度?
- android - 检索联系人
- oracle - 检索每个元素的 MASTER 父级