int main()
{
long long int first=0,second=1,T,N; //here T is Number of Cases
cin>>T;
long long int fab=first+second;
long long int sum[T];
for(long long int i=0;i<T;i++)
{
cin>>N;
while(fab<N)
{
first=second;
second=fab;
if(fab%2==0)
{
sum[i]+=fab;
}
fab=first+second;
}
}
for(int i=0;i<T;i++)
{
cout<<sum[i]<<endl;
}
return 0;
}
在上面的循环中,sum并不能提供正确的答案,但如果sum在循环之外使用,则它给出了适当的答案。
这:
cin >> T;
long long int sum[T];
不是有效的C++。C++中的数组必须使用编译时表达式来创建,以表示项数,而不是像T
这样的变量。
标准C++的正确结构是std::vector<long long>
:
#include <vector>
//...
cin >> T;
std::vector<long long> sum(T);
该代码现在是标准C++。
该代码所做的另一个方面是解决DietrichEpp在回答中提出的问题,即未能将VLA初始化为0。上面的矢量会自动将项目初始化为0。
因此,这个故事的寓意是,如果你使用标准C++,你的代码可能不会有问题。
sum[T]
变量未初始化。您必须初始化它:
long long sum[T] = {};
代码
long long int sum[T];
不是有效的C++。
谷歌搜索可变长度数组或动态数组。你可能会看到类似的答案
long long int *sum = new long long int[T].