由t运行的程序无法获得正确的数字

Program runs byt cant get the correct numbers

本文关键字:数字 运行 程序      更新时间:2023-10-16

标题

    • 下面是霍纳算法的代码。当我运行它时,在我输入变量,switch为n=3,z=1,a=[-3,2,3,-1],c=[-1,2,3]。现在i得到正确的数字,直到t[1][2],之后算法失败可以你发现问题了吗?正确答案是:t[1][3]=-9
      t[2][1]=6t[2][2]=9t[3][1]=4dp[0]=-9dp[1]=9dp[2]=8dp[3]=-6

    标题2

    在此处输入代码

    #include <iostream>
    #include "math.h"
    #include <cstdlib>
    using namespace std;
    int fact(int i)
    {
        int k=1,j;
        for(j=1;j<=i;j++)
        {
            k=k*j;
        }
        return(k);
    }
    int main()
    {
        int n,i,j;
        cout<<"give n"<<endl;
        cin>>n;
        int a[n+1],z,c[n],t[n+1][n],dp[n];
        cout<<"give z"<<endl;
        cin>>z;
        for (i=0;i<n+1;i++)
        {
            cout <<"give a"<<endl;
            cin >>a[i];
        }
        for (j=1;j<n+1;j++)
        {
            cout <<"give c"<<endl;
            cin >>c[j];
        }
        for (j=0;j<=n;j++)
        {
            t[0][j]=a[n-j];
        }
        for (i=0;i<=n+1;i++)
        {
            t[i][0]=a[n];
        }
        for (i=1;i<=n;i++)
        {
            for (j=1;j<=n-i+1;j++)
            {
                t[i][j]=t[i][j-1]*(z-c[n+2-i-j])+t[i-1][j];
                cout<<t[i][j]<<endl;
            }
        }
        for (i=0;i<=n;i++)
        {
            if(i==0)
            {
                dp[i]=t[i+1][n-i];
            }
            else
            {
                dp[i]=(fact(i))*(t[i+1][n-i]);
                cout<<dp[i]<<endl;
            }
        }
        return(0);
    }

在此处输入代码

在这个代码中,您将0分配给i,而不是将i与0进行比较

for (i=0;i<=n;i++)
    {
        if(i=0) // Wrong, change to if (i == 0) or if(!i) since i == 0 == !true
        {
            dp[i]=t[i+1][n-i];
        }
        else
        {
            dp[i]=(fact(i))*(t[i+1][n-i]);
            cout<<dp[i]<<endl;
        }
    }    return(0);