计算以下C代码中每个语句的频率计数

时间:2016-05-28 06:28:55

标签: c algorithm

如何在以下C代码中计算每个语句的频率计数(即每个语句被读取/执行的次数)。
每个陈述的频率计数必须以“&n”表示。

for(i=1;i<=n;i++)  
     for(j=1;j<=i;j++)  
          for(k=1;k<=j;k++)
                x=x+1;

3 个答案:

答案 0 :(得分:2)

最多可以这样看

for(i=1;i<=n;i++)  // Executes n times
     for(j=1;j<=i;j++)  // Executes i times for every i -> (1 + 2 + 3 + 4....n)
          for(k=1;k<=j;k++) // Executes j times for every i,j ---> (1+(1+2)+(1+2+3).....(1+2+3...n)) 
                x=x+1; // Executes every time for every i,j,k ---> (1+(1+2)+.....(1+2+3...n)

 So, you can figure out from this that :

n + n*(n+1)/2 + (n+(n-1)2+(n-2)3.....(1)n)*2 ... = n + n(n+1)/2+ ((n)(n+1)(n+2)/6)*2 ..这是你的答案。

答案 1 :(得分:1)

  • 第一个for循环执行n次。
  • 第二个for循环执行:1 + 2 + 3 + ..... + n = n(n + 1)/ 2
  • 第三个for循环执行:Σj(j + 1)/ 2,j = 1到n,即1 + 3 + 6 + 10 + .. + n(n + 1)/ 2。这称为三角形序列,总和为n(n + 1)(n + 2)/ 6。

答案 2 :(得分:1)

首先看看

for(i=1;i<=n;i++)  
    for(j=1;j<=i;j++)
         expression;

它会像:

for(i=1;i<=n;i++)  
    // i=1, 2, ..., n Total = n
    for(j=1;j<=i;j++)
         expression;
        // i=1 -> j=1             Total = 1
        // i=2 -> j=1, 2          Total = 2
        // ...
        // i=n -> j=1, 2, ..., n  Total = n

所以expression执行1 + 2 + ... + n次(n+1)*n/2

现在您可以计算单个表达式的频率。

i=1;  // 1
i<=n; // n+1
i++;  // n
j=1;  // n
j<i;  // ((n+2)*(n+1)/2) - 1   (2+3+...+(n+1))
j++;  // (n+1)*n/2

使用相同的方法,您可以添加for(k=1;k<=j;k++)并重新计算频率。