yueyufeng 发表于 2023-11-13 21:31:40

代码后面结果不对,不知道错哪里了

求出它的第n项。
通项表达式如下:
F(1)=0
;
F(2)=1
;
F(n)=4∗F(n−1)−5∗F(n−2)
;

每个函数结果都需要对998244353取模。
#include <stdio.h>
#include<math.h>
int lml(int n)
{
    int n1=0,n2=1,n3;
   for(int i=3;i<=n;i++)
   {
      n3=(4*n2-5*n1)%998244353;
      n1=n2;
      n2=n3;
   }
    return n3;
}
int main()
{
    int T;
    scanf("%d",&T);
    for(int i=1;i<=T;i++)
    {
      int num;
      scanf("%d",&num);
      printf("%d\n",lml(num));
    }

    return 0;
}

isdkz 发表于 2023-11-13 21:31:47

这段代码中存在一个小错误。在lml函数中,当i=3时,n1和n2的值分别为0和1,而n3的值却没有被赋初值。因此,需要在for循环之前初始化n3的值,例如将n3的初始值设为1。

修正后的代码如下:

#include <stdio.h>
#include<math.h>
int lml(int n)
{
    int n1=0,n2=1,n3=1; // 初始化n3的值为1
    for(int i=3;i<=n;i++)
    {
      n3=(4*n2-5*n1)%998244353;
      n1=n2;
      n2=n3;
    }
    return n3;
}
int main()
{
    int T;
    scanf("%d",&T);
    for(int i=1;i<=T;i++)
    {
      int num;
      scanf("%d",&num);
      printf("%d\n",lml(num));
    }

    return 0;
}


这样就可以正确计算出第n项的值,并对998244353取模。

Mike_python小 发表于 2023-11-13 21:33:15

你的代码看起来没有明显的错误。根据给定的通项表达式 F(n)=4*F(n-1)-5*F(n-2) 模 998244353,你在 lml 函数中正确地计算了第 n 项的值。可能有以下几个原因导致结果不正确:

1. 输入错误:请确保你在输入时没有出错,特别是对于变量 T 和 num 的输入。
2. 数据溢出:由于取模操作 (4*n2-5*n1)%998244353 可能会产生较大的中间结果,因此请确保你的数据类型足够大以容纳这些中间结果。可以将 n1、n2 和 n3 声明为 long long 类型,以避免整数溢出问题。
3. 遗漏的边界条件:请检查你的代码是否正确处理了 n=1 和 n=2 的特殊情况。

你可以尝试根据以上提示进行调试,并检查你的输入和输出是否符合预期。如果问题仍然存在,请提供更多详细信息,以便让我更好地帮助你解决问题。

yueyufeng 发表于 2023-11-13 21:36:34

Mike_python小 发表于 2023-11-13 21:33
你的代码看起来没有明显的错误。根据给定的通项表达式 F(n)=4*F(n-1)-5*F(n-2) 模 998244353,你在 lml 函 ...

改了,但是第31项结果和代码运行的不一样,第31项结果是780510847
页: [1]
查看完整版本: 代码后面结果不对,不知道错哪里了