wangyihan_ @ 2024-08-27 11:11:13
点5.6有前导0,点10 第1行 第1列 输出2,期望6
#include<bits/stdc++.h>
using namespace std;
int n,maxn=100000,a[1010],b[1010],c[1010],l;
int main()
{
cin>>n;
a[1]=1;
b[1]=2;
for(int i=3;i<=n;i++)
{
memset(c,0,sizeof(c));
for(int j=1;j<=maxn;j++) c[j]=a[j]+b[j];
for(int j=1;j<=maxn;j++)
{
c[j+1]+=c[j]/10;
c[j]%=10;
}
for(int j=1;j<=maxn;j++) a[j]=b[j];
for(int j=1;j<=maxn;j++) b[j]=c[j];
}
l=100000;
while(l>1&&c[l]==0) l--;
for(int i=l;i>=1;i--) printf("%d",c[i]);
return 0;
}
by study_Zzz @ 2024-08-27 11:25:18
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5005;
int f[N][N];
int lenc=1;
int n;
void gadd(int k){
for(int i=1; i<=lenc; i++){
f[k][i]=f[k-1][i]+f[k-2][i];
}
for(int i=1; i<=lenc; i++){
if(f[k][i]>9){
f[k][i+1]+=f[k][i]/10;
f[k][i]%=10;
}
}
if(f[k][lenc+1]>0)
lenc++;
while(f[k][lenc]==0 && lenc>1)
lenc--;
}
int main(){
cin >> n;
f[1][1]=1, f[2][1]=2;
for(int i=3; i<=n; i++)
gadd(i);
for(int i=lenc; i>=1; i--)
cout << f[n][i];
return 0;
}
by study_Zzz @ 2024-08-27 11:26:41
递推式:f[k][i]=f[k-1][i]+f[k-2][i]
by study_Zzz @ 2024-08-27 11:27:46
你不能用一维的
by wangzhenshu @ 2024-08-27 11:27:48
首先1,2要特判 还有(maxn=100000,a[1010],b[1010],c[1010]) 这里数组的范围比maxn小,肯定越界
by wangzhenshu @ 2024-08-27 11:29:02
以上就是全部问题
by study_Zzz @ 2024-08-27 11:29:50
按照你这样的应该是:
a[0]=1;
b[1]=2;
for(int i=2;i<=n;i++){
............
}
........
by wangyihan_ @ 2024-08-27 18:24:28
已AC,谢