我有这段代码
AUTOEXTEND MAXSIZE UNLIMITED
我将决定执行foo()的次数。我有这个选项
for ( i = 0; i < N ; i+=3 ){
foo();
if( i % 5 ==0) foo();
}
决定正确结果的正确方法是什么?外循环在条件N / 3次之外执行foo(),但如何判断条件执行函数的次数是多少次?
答案 0 :(得分:1)
为了更容易理解,我们可以将这个循环分成2:
for ( i = 0; i < N ; i += 3 ){
foo();
}
for ( i = 0; i < N ; i += 15 ){
foo();
}
对于任何自然的 N 和 K 周期(i = 0; i&lt; N; i + = k)将运行 1 +楼((N-1)/ k)次。
这样总的运行次数将是: 1 + floor((N-1)/ 3)表示第一个, 1 + floor((N-1)/ 15)表示第二个周期:
2 + floor((N-1) / 3) + floor((N-1) / 15)
答案 1 :(得分:0)
如果循环是
for ( i = 0; i < N ; i+=3 ){
foo();
}
然后它将执行大约N / 3次(确切地说是((N + 2/3))。如果循环是
for ( i = 0; i < N ; i+=3 ){
if( i % 5 ==0) foo();
}
然后它会执行大约N / 15次(确切地说是(N + 14)/ 15),因为
i
是3的倍数i
是5的倍数时才会执行foo; i
是3 的倍数并且是5的倍数时才会执行foo;因此,只有它是15的倍数。通过一些非常简单的推论;正确答案是两者的总和。
floor((N+2)/3)+floor((N+14)/15)
答案 2 :(得分:0)
查看不同公式如何工作的一种相当简单的方法是在excel中为每个公式编写一个函数,然后为它们提供不同的N值,然后将结果与您手动计算的N的某些值进行比较。 / p>
正如之前已经观察到的那样,第二次调用foo()只会在i%5为0时执行。因为i步长为3,所以这只会每15次执行一次,因为15是最小的数字。可以被3和5整除。这样可以排除一些公式。