2017-10-28 48 views
0

對於這個代碼操作頻率

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

我的線人說:

frequency for variable declaration is 2 

frequency for assignment statement is 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 N+2 

frequency for assignment statement is N+2. 

我不明白爲什麼結果是第二個代碼的N + 2。我認爲它應該是3的變量聲明。你能告訴我這兩個代碼部分的區別嗎?

回答

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的循環中聲明。因此,它將在循環的每次迭代中聲明。有N迭代i的循環,所以它將被宣佈爲N次。 i將被聲明一次,並且count將被聲明一次,因此總共是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次。這是因爲對於上層循環的每次迭代,內層循環都會重新開始。

而且counti被聲明一次。因此,你得到N+2頻率。