pengqiushi @ 2022-10-07 12:05:41
代码如下:
#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
//cout<<sum[1];
la=lb;
for(int i=1; i<=lb; i++)
a[i]=b[i];
lb=lsum;
for(int i=1; i<=lsum; i++)
b[i]=sum[i];
int c=0;
//lsum=1;
for(int i=1; i<=1; i++){
sum[i]=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
//break;
}
}
}
}
int main()
{
int n;
cin>>n;
if(n==1||n==2){
cout<<"1";
return 0;
}
a[1]=1;
b[1]=1;
for(int i=1; i<=n; i++)
cmp();
/*if(n>=7)
sum[lsum]++;*/
for(int i=lsum; i>=1; i--)
cout<<sum[i];
return 0;
}
by _coastline_ @ 2022-10-07 20:22:56
for(int i=1; i<=lsum; i++){
sum[i]=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
//break;
}
}
}
这一段错了,sum[i] 如果直接等于a[i]+b[i],上一位的进位就会被覆盖
而如果考虑sum[i] += a[i]+b[i],前提要保证sum数组在计算前清零,可以逐个设置,也可以使用memset函数
by _coastline_ @ 2022-10-07 20:24:33
还有你设置的那个变量c好像没什么用
by _coastline_ @ 2022-10-07 20:25:02
@pengqiushi
by pengqiushi @ 2022-10-07 21:24:27
@xujiabin194 谢谢,运行可以了,但提交后10分
#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
//cout<<sum[1];
la=lb;
for(int i=1; i<=lb; i++)
a[i]=b[i];
lb=lsum;
for(int i=1; i<=lsum; i++)
b[i]=sum[i];
int c=0;
for(int i=1; i<=100; i++)
sum[i]=0;
for(int i=1; i<=lsum; i++){
sum[i]+=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
break;
}
}
}
}
int main()
{
int n;
cin>>n;
if(n==1||n==2){
cout<<"1";
return 0;
}
a[1]=1;
b[1]=1;
for(int i=1; i<=n; i++)
cmp();
for(int i=lsum; i>=1; i--)
cout<<sum[i];
return 0;
}
by _coastline_ @ 2022-10-07 21:40:48
@pengqiushi 你cmp改好了主函数又忘记改了(?
by _coastline_ @ 2022-10-07 21:41:56
@pengqiushi
if(n==1||n==2){
cout<<"1";
return 0;
}
a[1]=1;
b[1]=1;
改成:
if(n==1||n==2){
cout<<n;
return 0;
}
a[1]=1;
b[1]=2;
by pengqiushi @ 2022-10-07 21:48:04
@xujiabin194 还是不对啊
#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
//cout<<sum[1];
la=lb;
for(int i=1; i<=lb; i++)
a[i]=b[i];
lb=lsum;
for(int i=1; i<=lsum; i++)
b[i]=sum[i];
int c=0;
for(int i=1; i<=100; i++)
sum[i]=0;
for(int i=1; i<=lsum; i++){
sum[i]+=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
break;
}
}
}
}
int main()
{
int n;
cin>>n;
if(n==1||n==2){
cout<<n;
return 0;
}
a[1]=1;
b[1]=2;
for(int i=3; i<=n; i++)
cmp();
for(int i=lsum; i>=1; i--)
cout<<sum[i];
return 0;
}
by _coastline_ @ 2022-10-07 21:49:48
az
by _coastline_ @ 2022-10-07 21:54:36
哦明白了
你cmp里面应该是先计算再交换数组的
我改成这样就OK了:
#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
//cout<<sum[1];
for(int i=1; i<=lsum; i++){
sum[i]+=a[i]+b[i];
if(sum[i]>=10){
sum[i+1]++;
sum[i]-=10;
if(i==lsum){
lsum++;
break;
}
}
}
la=lb;
for(int i=1; i<=lb; i++)
a[i]=b[i];
lb=lsum;
for(int i=1; i<=lsum; i++)
b[i]=sum[i];
int c=0;
for(int i=1; i<=100; i++)
sum[i]=0;
}
int main()
{
int n;
cin>>n;
if(n==1||n==2){
cout<<n;
return 0;
}
a[1]=1;
b[1]=2;
for(int i=3; i<=n; i++)
cmp();
for(int i=lb; i>=1; i--)
cout<<b[i];
return 0;
}
by _coastline_ @ 2022-10-07 21:57:47
还有一点:N最大5000,你数组开的有点小,我刚刚本地测IDE,1000就爆了
开到10000应该行,100可能不够会爆数组RE(不太确定,我写的时候开的12345