如何在以下C代码中计算每个语句的频率计数(即每个语句被读取/执行的次数)。
每个陈述的频率计数必须以“&n”表示。
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
x=x+1;
答案 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)
答案 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++)
并重新计算频率。