2016-07-21 7 views
-4
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; 
} 

上記のforループsumは正解を提供していませんが、sumがforループの外側で使用されている場合、適切な答えが得られます。私のC++コードでループ外の和を出力すると、正しい答えが得られますが、while/whileのループはありません。

+5

ちょうどニックピック:VLAは標準ではありませんC++ – WhiZTiM

+3

私はそれがニックピック以上のものだと思っています。 OPがVLAの代わりに 'std :: vector'のような適切なC++構造体を使用した場合、問題はなく、この質問を投稿したことはありません。 – PaulMcKenzie

答えて

1

のような答えがありそう表示されます。 C++の配列は、コンパイル時の式を使用して項目の数を表すように作成する必要があります。変数はTなどではありません。

それを使用するための適切な構築物は、標準C++がstd::vector<long long>です:

#include <vector> 
//... 
cin >> T; 
std::vector<long long> sum(T); 

コードはC++標準です。

DietrichEppの回答で問題が解決され、VLAを0に初期化できなかったという問題があります。上記のベクトルは、自動的にアイテムを0に初期化していました。

したがって、標準のC++を使用すると、おそらくコードに問題はないでしょう。

1

sum[T]変数が初期化されていません。あなたはそれを初期化する必要があります。

long long sum[T] = {}; 
0

コード

long long int sum[T]; 

が有効なC++ではありません。

可変長配列または動的配列用のGoogle。

cin >> T; 
long long int sum[T]; 

が有効なC++ではありません:あなたはこの

long long int *sum = new long long int[T]. 
+0

'std :: vector sum(T);'ベクトルのデフォルトオプションは、バッキング配列をゼロに初期化し、OPの問題を消滅させます。 – user4581301

+0

実際、標準タイプを使用するのは良い方法です。元のポスターは、std :: vectorを使うためにインクルードディレクティブとネームスペースについて少し学ばなければなりません。 – ruffyontheweb

関連する問題