题目描述
for(int i = 1; i < n; i++) {
for(int j = 1; j < i; j++) {
for(int k = 1; k < j; k++) {
cout << "Hello World ";
}
}
}
上述循环一共执行了多少次”Hello World “语句?
不妨假设
a[n,3]
为循环层数为3,输入值为
n
时的语句执行次数,则有
a[n,3]=a[n−1,2]+a[n−2,2]+a[n−3,2]+⋯+a[4,2]+a[3,2]
=a[n−2,1]+a[n−3,1]+⋯+a[2,1]
+a[n−3,1]+⋯+a[2,1]
+⋯⋯⋯
+a[2,1]
=a[n−2,1]+2∗a[n−3,1]+⋯+(n−4)∗a[3,1]+(n−3)∗a[2,1]
又因为
a[m,1]=m−1
所以有
a[n,3]=(n−3)∗1+(n−4)∗2+⋯+2∗(n−4)+1∗(n−3)=∑n−3k=1(n−k−2)∗k
又因为
(n−2)2=k2+(n−k−2)2+2∗(n−k−2)∗k
即
∑k=1n−3(n−k−2)∗k=12(n−3)(n−2)2−12∑k=1n−3(k2+(n−k−2)2)