繁体   English   中英

为什么算法对 C++ 和 Python 给出了不同的答案?

[英]Why the algorithm gives different answers for C++ and Python?

我今天做了一个算法练习。 这个问题的教程给出了一个用 C++ 编写的示例答案:

int dp[21][200];
int i, j, k;
 
void main()
{
    int bucketN, fishN;
    scanf("%d %d", &bucketN, &fishN);
 
    dp[0][0] = 1;  
 
    for(int i = 1; i <= bucketN; ++i) 
    {
        for(int j = 0; j <= fishN; ++j)
        {
            for(int k = 0; k <= 10 && j-k >= 0; ++k)
            {
                dp[i][j] += dp[i-1][j-k];
            }
        }
    }
    printf("%d\n",dp[bucketN][fishN]);
}

如果bucketNfishN都是20,则输出将为65649764

我将 C++ 实现翻译成 Python,我的代码如下所示。

import numpy as np
arr = np.zeros((21, 200))

def main(bucket, fish):

    b, f = bucket, fish
    arr[0, 0] = 1

    for i in range(1, b+1):
        for j in range(f+1):
            for k in range(11):
                if j-k < 0:
                    break
                else:
                    arr[i, j] += arr[i-1, j-k]
    
    print(arr[b, f])
    return arr[b, f]

if __name__ == '__main__':
    main(20, 20)

bucketfish仍然是 20,但输出是68785126410.0

我感到很困惑,我认为我的代码与原始 C++ 代码相同。 希望有C++或Python高手能解释一下。

在 C++ 代码中, dp数组的数据类型是 int,最多可以容纳数字 2147483647。您正在寻找的真正非溢出答案由您的 Python 代码 68785126410 返回。将 C++ 代码中的第一行更改为: int dp[21][200]; long long int dp[21][200]; 以及从"%d%lld的 printf 格式说明符,以查看 C++ 和 Python 中匹配(和正确)的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM