C++与Python版本相同的算法给出不同的RESU

2024-09-21 03:14:57 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码是一个算法,用于确定具有整数中值的整数三角形的数量,这些三角形的最大边小于或等于MAX。Python版本工作,但是对于较大的N来说太慢了,而C++版本快得多,但是没有给出正确的结果。在

当max为10时,C++和Python均返回3。在

当max为100时,Python返回835,C++返回836。在

当max为200时,Python返回4088,C++返回4102。在

当max为500时,Python返回32251,C++返回32296。在

当max为1000时,Python返回149869,C++返回150002。在

这是C++版本:

#include <cstdio>
#include <math.h>

const int MAX = 1000;

int main()
{
    long long int x = 0;
    for (int b = MAX; b > 4; b--)
    {
        printf("%lld\n", b);
        for (int a = b; a > 4; a -= 2){
            for (int c = floor(b/2); c < floor(MAX/2); c+=1)
            {
                if (a+b > 2*c){
                    int d = 2*(pow(a,2)+pow(b,2)-2*pow(c,2));
                    if (sqrt(d)/2==floor(sqrt(d)/2))
                        x+=1;
                }
            }
            }
    }
    printf("Done: ");       
    printf("%lld\n", x);
}

以下是Python的原始版本:

^{pr2}$ <>我不太熟悉C++,所以我不知道会发生什么事情(可能是溢出错误)。在

当然,对算法的任何优化都是非常受欢迎的!在


Tags: 版本算法forifinclude整数maxlong
2条回答

这里可能有一些麻烦:

(sqrt(d)==floor(sqrt(d))) 

问题是c(python中的C)变量的范围不匹配。为了使它们与现有的C++范围相当,可以将Python循环更改为:

for C in range(int(math.floor(b/2)), int(math.floor(n/2))):
    ...
<> >使它们与现有的Python范围相等,可以将C++循环更改为:

^{pr2}$

根据最初正确的循环,这将使结果匹配。在

相关问题 更多 >

    热门问题