计算卡特兰号时无法找出错误

苏吉思·希瓦帕拉卡什

在这段代码中,我正在使用catlan数字来计算唯一的Binary Search Trees的数目。直到输入值的答案仍然是正确n=13n>=14答案原来由一个要少一些。例如。对于n=14我的答案是2674439,而实际的答案是2674440.这里是代码。

#include "stdafx.h"
#include "iostream"
using namespace std;
class Solution {
public:
    double arr[20000] = {};
    double fact(int n) {
        if (n == 1 || n == 0)
          return 1;
        if (arr[n] != 0)
          return arr[n];
        return arr[n] = ceil(n*fact(n - 1));
}

int numTrees(int n) {
    int res = fact(2 * n) / ((fact(n + 1))*fact(n));
    return res;
}
};


int main()
{    
  Solution s;
  cout << s.numTrees(14)<<endl;
  return 0;
}
口香糖

问题是此功能:

int numTrees(int n) {
   int res = fact(2 * n) / ((fact(n + 1))*fact(n));
   return res;
}

基本上,通过将double值转换为int会损失一些精度,因此无法获得正确的值。如果将其更改为两倍,问题将消失。

更正的功能:

double numTrees(int n) 
{
   double res = fact(2 * n) / ((fact(n + 1))*fact(n));
   return res;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

添加到数组时无法找出错误

字谜检查逻辑错误 - 似乎无法找出错误

启动Glassfish时出错(错误号= 22)

CakePHP:无法找出错误“成功”:false,“消息”:

ReactPage 显示空白屏幕 - 无法找出错误

渲染为未定义,无法完全找出错误

无法找出以下错误

无法找出逻辑错误

无法找出ActionListener的错误

无法找出错误,此代码中的错误正在返回整数数组

无法找出错误的来源(调试器说分段错误)

源代码中的uniroot()函数无法进行修改;无法找出错误

在后台运行coreml时出错:计算NN输出错误时出错

AttributeError: 'list' 对象没有属性 'split' 无法找出错误

在localhost上设置Debug = False会使应用程序崩溃,并且无法找出错误原因

Python 语法错误 - 按照给定的示例进行操作,但无法找出我出错的地方

计算多个文本中的单词时输出错误

当 csv 文件不会被 php 上传时,如何找出错误?

调用Method时发生System.ArgumentOutOfRangeException。我如何找出错误发生的地方?

双开包号时出错

无法找出BFS中的错误

无法找出我的验证错误

无法找出这个Android错误

无法反序列化当前JSON数组(例如[1,2,3])。C#,无法找出错误

当Kohana网站除了抛出错误500之外什么都不做时,如何找出我正在处理的错误?

创建@OneToOne时抛出错误,无法检索ResultSet

安装nokogiri时出错:错误:无法构建gem本机扩展

tokbox创建会话时出错:错误:无法创建会话

错误:启动 Studio 时出错 无法加载 JVM DLL