gpt4 book ai didi

c - 不明白 Codility CountDiv 解法是如何正确的

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:37 27 4
gpt4 key购买 nike

Codility CountDiv Exercise :

给定范围 A..B 和值 K,返回范围内可被 K 整除的值的数量。

给出的例子是A=6,B=11,K=2。在6到11的范围内,能被2整除的数是6、8、10,所以答案是3。求解必须是O (1) - 所以需要一个简单的计算。

您可以假设 A 和 B 在 0..2,000,000,000 范围内,K 是 1..2,000,000,000 并且 0 <= A <= B。

公认的得分为 100% 的解决方案如下:

int solution(int A, int B, int K)
{
int inclusive = ((A%K)==0) ? 1 : 0;
return (B/K) - (A/K) + inclusive;
}

我感到困惑的地方是,当我使用输入 A=0、B=0 和 K=1 测试此解决方案时,结果是 1?我本以为在0到0的范围内,能被1整除的数值个数是……0!

我认为这是一个错误,只有当 A 不为零时才应设置 A 的包含值的 +1。

所以我提交了以下解决方案(测试A是否非零):

int solution(int A, int B, int K)
{
int inclusive = (A && (A%K)==0) ? 1 : 0;
return (B/K) - (A/K) + inclusive;
}

但这只得分了 62%(50% 的正确性和 75% 的性能)。它失败的一些测试用例是:

  • A = 0,B = 1,K = 11 - 得到 0,预期 1
  • A = 0, B = MAXINT, K in {1,MAXINT}, 得到2000000000, expected 2000000001

谁能解释一下?

最佳答案

对于所有允许的(非零)K,值0 可以被K 整除。零没有什么特别的。整除的定义是除后没有余数。

关于c - 不明白 Codility CountDiv 解法是如何正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com