代码中的运行时错误,用于求解最小的偶数可整除



问题是找到可以被 17 和 32 整除且平方根大于 120 的最小偶数。

此代码输出 32,这显然不是真的。任何人都可以发现我的错误吗?

#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
    int i = 1;
    if(i%2!=0){
        i++;
    }
    while(i%17!=0 && i%32!=0 && sqrt(i)<120){
        i+=2;
    }
    cout<<i<<endl;
}

i%17!=0 && i%32!=0 && sqrt(i)<120这就是问题所在。您的停止条件应为:

而(它不是(可被 17 整除,可被 18 整除其根大于 120))。

这等于:

while(!(i%17==0 && i%32==0 && sqrt(i)>120))

甚至更短地使用德摩根定律:

while(i%17!=0 || i%32!=0 || sqrt(i)<=120)

你的布尔表达式是错误的。您需要在任何条件为真时循环,因为它必须在 i % 17 == 0、i % 32 == 0 或 sqrt(i) <= 120 时结束。对此的否定是一个 or'd 表达式。

答案是

#include <math.h>       /* ceil */
#include <iostream>
int main ()
{
    std::cout<<ceil((120*120)/(32*17))*(32*17);
}

不要对简单的数学问题使用循环

为了提高效率,你应该从 LCM 的 17 和 32 开始,即 544,然后逐步上升,而不是从 1 开始。

相关内容

  • 没有找到相关文章

最新更新