c++我这道题为什么会错?

img


#include<bits/stdc++.h>
using namespace std;
const int M = 1000010;
long long a[M]={0};
int main()
{
 
    int n;
    cin>>n;
    a[1]=1;a[2]=2;
    for(int i=3;i<=M;i++)
          a[i]=2*a[i-1]+a[i-2];
        while(n--)
        {
               int k;
            cin>>k;cout<<a[k]%32767<<endl;
        }
 
 
    return 0;
}

要在赋予数值时先取模
img


#include<bits/stdc++.h>
using namespace std;
const int M = 1000010;
long long a[M]={0};
int main()
{
 
    int n;
    cin>>n;
    a[1]=1;a[2]=2;
    for(int i=3;i<=M;i++)
          a[i]=(2*a[i-1]+a[i-2])%32767;
        while(n--)
        {
               int k;
            cin>>k;cout<<a[k]<<endl;
        }
    return 0;
}

这么算肯定不行啊 得用算法优化啊 那个k都一百万以内了
再想想优化一下 看看规律哈哈

既然%32767
前期打表的时候可以加一个判断啊
加油

这个地方好多大神啊

我居然回答晚了
这题确实是基础
这还可以优化 可以试试杭电oj的题 确实锻炼算法

这种题最好是先找规律
不要直接暴力
多练练算法
看看别人的提交
基本都是位运算算法没有直接暴力解题的