2017-10-28 12 views
0

操作頻度、このコードの場合

int count=0; 
for(int i=0;i<N;i++) 
    if(a[i]==0) 
     count++; 

私のソースは、と言っている:

frequency for variable declaration is N+2 

frequency for assignment statement is N+2. 
:それはと言う

int count=0; 
for(int i=0;i<N;i++) 
    for(int j=i+1;j<N;j++) 
     if(a[i] + a[j] == 0) 
      count++; 

frequency for variable declaration is 2 

frequency for assignment statement is 2 

しかし、このコードについて

2番目のコードの結果がN + 2である理由を理解できませんでした。私は変数宣言のために3でなければならないと考えました。これら2つのコード部分の違いを教えてください。

答えて

0

はい。 jは、繰り返しのたびに一度、iと宣言されているので、そうです。したがって、jのN回、次にicountの2回。

同じロジックを使用する最初のケースでは、2つの宣言があることがわかります。

同じことは、宣言ロジックを理解すると明確になる代入ステートメントになります。これで

int count=0; <--- declaration +1 
for(int i=0;i<N;i++) <--- int i = 0 <-- +1 
    for(int j=i+1;j<N;j++) <-- i=0,1,2..N-1 <-- N times 
     if(a[i] + a[j] == 0) 
      count++; 
0

jiのループ内で宣言されています。したがって、ループの繰り返しごとに宣言されます。 のループがiのループであるため、Nと宣言されます。 iは1回宣言され、countは1回宣言されるので、合計でN + 2宣言になります。

割り当ての場合も同様です。

0

-

int count=0; 
for(int i=0;i<N;i++)   
    for(int j=i+1;j<N;j++)  
     if(a[i] + a[j] == 0) 
      count++; 

j内側ループでは、何回N倍上側ループ反復として宣言されます。これは、上位ループの反復ごとに、内部ループが再び開始されるためです。

countおよびiは1回宣言されています。したがって、N+2の頻度が得られます。

関連する問題