#include<bits/stdc++.h> using namespace std; long long a[1000001]; int main() { long long i,k,n; scanf("%lld",&n); a[1]=1; a[2]=2; for(i=3;i<=1000001;i++) { a[i]=(a[i-1]*2+a[i-2])%32767; //此题特别注意超时 } for(long long j=1;j<=n;j++) { scanf("%d",&k); printf("%d\n",a[k]); } return 0; }
如果利用函数递归,则需要使用数组进行记忆递归,否则超时
#include <stdio.h> #define MOD 32767 #define N 1000000 int a[N+1]; void f(int n) { int i; a[1] = 1; a[2] = 2; for(i=3; i<=n; i++) a[i] = (2 * a[i - 1] + a[i - 2]) % MOD; } int main(void) { int n, i; f(N); scanf("%d", &n); while(n--)
{ scanf("%d", &i); printf("%d\n", a[i]); } return 0; }