我是一个离散的数学课,到目前为止他对编程和代码的解释很少。他还说他喜欢向我们的作业提出疯狂的问题,让我们失望。因此,我在这里向您学习这个特殊的问题! (我不知道如何进一步研究这个问题,因为我不确定这是什么语言,我认为它可能是C ++?)
以下代码中的添加和乘法总数是多少?
s := 0
for i := 1 to n
s:= s + i
for j:= 1 to i
s := s + j*i
next j
next i
s := s+10
(a) n
(b) n^2
(c) n^2 + 2n
(d) n(n + 1)
(e) (n + 1)^2
(f) none of these.
答案 0 :(得分:0)
外部循环中n
增加了s
个,而n(n+1)/2
内部迭代每个都包含一个加法和一个乘法(乘以2),因此内部循环中的n^2 + n
操作加上最后的单个添加总计:
[n additions to s] + [n(n + 1) inner loop operations] + [the very last line]
= n + n(n+1) + 1
= n + n^2 + n + 1
= n^2 + 2n + 1
= (n + 1)^2 operations (e)
这当然假设在i
和j
上执行的隐式操作不计入添加项。据推测,您不会被要求知道编译器如何处理基于范围的循环。