1

这给出了 200003 的金额

#include <stdio.h>
int main(void){
int i = 0;
int x = 0, x15 = 0;
     for (i=0; i<1000; i++){
            if (i%3==0 || i%5==0){
                    x += i;
            }
            if (i%15==0){
                    x15 += i;
            }
    }
printf("%d'\n", x-x15);
return 0;
}

这给出了金额 233168

#include <stdio.h>
int main(void){
int i = 0;
int x3 = 0, x5 = 0, x15 = 0;

    for (i=0; i<1000; i++){

            if (i%3==0){
                    x3 += i;
            }
            if(i%5==0){
                    x5 += i;
            }
            if (i%15==0){
                    x15 += i;
            }
    }
printf("%d\n", x3+x5-x15);
return 0;
}

谁能解释两者之间有什么不同?我希望两者提供相同的输出。

4

4 回答 4

4

15 的倍数将被添加到底部代码中的 x3 和 x5 中,因此它们被计算两次。在顶级版本中,每个只计算一次。

于 2012-12-15T00:14:00.010 回答
1

数字可以是 3 和 5 的倍数,例如 15

于 2012-12-15T00:12:06.717 回答
1

经过一番简化,这两个代码的区别是:

        if (i%3==0 || i%5==0){
                x += i;
        }

        if (i%3==0){
                x += i;
        }
        if(i%5==0){
                x += i;
        }

显然,他们不会做同样的事情。15 的乘法在第一个代码中计算一次,在第二个代码中计算两次。

于 2012-12-15T00:15:25.237 回答
0
    if (i%3==0 || i%5==0){
            x += i;
    }

相当于

    if (i%3==0){
            x += i;
    }
    else if(i%5==0){
            x += i;
    }

    if (i%3==0){
            x += i;
    }
    if(i%5==0){
            x += i;
    }
于 2012-12-15T00:16:13.470 回答