【问题标题】:I don't get the correct output even thouh my code has no errors即使我的代码没有错误,我也没有得到正确的输出
【发布时间】:2020-09-01 15:25:48
【问题描述】:

我尝试创建一个计算组合的程序,并且我正在使用代码块我认为我的代码没有问题我从互联网上下载了用于 Mingw 的 gdb32,因为我的导师使用它并且默认情况下不包含它。我尝试了几个测试用例和不同的方法,包括递归和迭代,之前没有错误我曾经得到 id returned 1 exit status 错误但现在没有错误但输出不正确

#include <iostream>

using namespace std;
int factorial (int n)
{
    int i=1,fact;
    if(n==0)
    {
        return 1;
    }
    else
    {
        while(n!=0)
        {
            fact=i*n;
            n--;
        }
    }
    return fact;
}
int nCr(int n, int r)//Iterartive combinatrics
{
    int num,den;
    num=factorial(n);
    den=factorial(r)*factorial(n-r);
    return num/den;
}
int NCR (int n, int r)//recursive combinatrics
{
    if (n==r||n==0)
    {
        return 1;
    }
    else{
        return NCR(n-1,r-1)+NCR(n-1,r);
    }
}
int main()
{
    cout << nCr(5,2)<< endl;
    cout << nCr(5,1)<< endl;
    return 0;
}

【问题讨论】:

  • 使用你的调试器找到你的错误。
  • 显然你的代码确实有错误。老师不讲各种错误吗?
  • “即使我的代码没有错误,我也没有得到正确的输出” - 没有编译器错误与您的程序没有错误相同。甚至没有关闭。
  • 如果你没有得到正确的输出,那么根据定义你的程序有错误。您需要扩大对“错误”含义的理解。
  • @OP -- 为了简单起见 -- 如果你被要求编写一个程序来将两个数字相加,但程序却减去了这两个数字,那么代码将编译没有错误,但是该程序没有完成正确的任务。这基本上就是其他人所说的没有编译器错误和没有逻辑错误是两件不同的事情时所指的。

标签: c++ function loops recursion math


【解决方案1】:

这是错误的:

while(n!=0)
{
    fact=i*n;
    n--;
}

你想要:

while(n!=1)
{
    fact*=n;
    n--;
}

fact 应初始化为 1。 此外,使用int 类型不是计算数值算法的最佳选择,因为它不能存储更大的值(限制为~2E9)并且显然不能返回小于一个单位值(所以对于任何严重的事情都是错误的)。

至少,即使不完美,您也应该改用double。 理想情况下,您甚至可以实现自己的 Fraction 类型以支持真实值而不是近似值。

另外,你应该尽量避免这种代码:

int num,den;
num = ...
den = ...

更喜欢这个:

int num = ...;
int den = ...;

稍后,您会发现auto 更简单,因此您可以这样写:

auto num = ...;
auto den = ...;

编译器断言你代码的语法是正确的,它不能断言代码的意图(只有你可以)。因此,如果您编写的算法是错误的,但使用正确的语法,您将得到错误的输出。因此,在进入编译和返工周期之前,您必须首先考虑算法。

例如,在您的练习中,我会首先检查factorial 的输出(因为组合很简单)并发现您编写的算法是错误的。做一些小步骤,测试并扩展系统和循环,这比尝试一次调试复杂系统要容易得多。

祝你好运!

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 2016-05-05
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多