gpt4 book ai didi

c++ - 将 while 循环转换为数学公式

转载 作者:行者123 更新时间:2023-11-30 18:17:30 25 4
gpt4 key购买 nike

我将以下循环作为内部循环,并尝试通过将其转换为数学公式来摆脱它:

while(!(((aux = a * b) <= c) && (c >= aux + d))) --a;

abcdaux 均为输入 size_t,即 unsigned int

注意: a 在循环体内的每次迭代中都会递减!

我完全被这个问题困扰了。我尝试简化循环条件,但由于 unsignedness 约束而失败。

结果我只想根据 bc 获取 a 的值>d.

最佳答案

替换auxa*b在每一点上,你都会得到:

    !(a * b <= c && c - a * b >= d)
<=> !(a * b <= c && c >= d + a * b)
<=> !(a * b <= c && d + a * b <= c)

如果d大于c ,第二个条件将为假,因此循环永远不会终止。所以我们只能考虑d <= c 。第二个条件更严格,因此我们可以只关注它:

<=> !(d + a * b <= c)
<=> !( a * b <= c - d)
<=> !( a <= (c - d)/b) // if integer division is used
<=> ( a > (c - d)/b)

假设您只递减 a ,它要么需要满足条件(a <= (c - d)/b)从一开始或者小于或等于(c - d)/b 。总的来说,我们得到:

a = std::min(a, (c - d)/b);

关于c++ - 将 while 循环转换为数学公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30509751/

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