首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同算法的C++和Python给出了不同的结果

相同算法的C++和Python给出了不同的结果
EN

Stack Overflow用户
提问于 2015-04-28 04:23:50
回答 2查看 645关注 0票数 0

下面的代码是一种算法,用于确定具有整数中值的整数三角形的数量,其最大边小于或等于最大值。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++版本:

代码语言:javascript
复制
#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版本:

代码语言:javascript
复制
import math

def sumofSquares(n):
    f = 0
    for b in range(n,4,-1):
        print(b)
        for a in range(b,4,-2):
            for C in range(math.ceil(b/2),n//2+1):
                if a+b>2*C:
                    D = 2*(a**2+b**2-2*C**2)
                    if (math.sqrt(D)/2).is_integer():
                        f += 1
    return f

a = int(input())
print(sumofSquares(a))
print('Done')

我对C++不太熟悉,所以我不知道导致这种情况的原因(可能是溢出错误?)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-28 04:46:47

问题是您的c (C in python)变量的范围不匹配。要使它们与现有的C++范围等效,您可以将python循环更改为:

代码语言:javascript
复制
for C in range(int(math.floor(b/2)), int(math.floor(n/2))):
    ...

要使它们与您现有的python范围等效,您可以将C++循环更改为:

代码语言:javascript
复制
for (int c = ceil(b/2.0); c < MAX/2 + 1; c++) {
    ...
}

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

票数 1
EN

Stack Overflow用户

发布于 2015-04-28 04:38:13

它缝上了一些麻烦:

代码语言:javascript
复制
(sqrt(d)==floor(sqrt(d))) 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29910293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档