1

this gives the amount 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;
}

this gives the amount 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;
}

can anyone explain what's different between the two? I would expect the two to provide the same output.

4

4 に答える 4

4

一番下のコードでは、x3 と x5 の両方に 15 の倍数が加算されるため、2 回カウントされます。最上位バージョンでは、それぞれが 1 回だけカウントされます。

于 2012-12-15T00:14:00.010 に答える
1

単純化すると、2 つのコードの違いは次のようになります。

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

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

明らかに、彼らは同じことをしていません。15 の倍数は、最初のコードで 1 回計算され、2 番目のコードで 2 回計算されます。

于 2012-12-15T00:15:25.237 に答える
1

数値は 3 と 5 の倍数にすることができます (例: 15)

于 2012-12-15T00:12:06.717 に答える
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 に答える