2017-10-28 109 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频率。