-3

プロジェクト Euler (および C コードの初心者) の問題解決に取り掛かりました。

問題 1 の状態: 3 または 5 の倍数である 10 未満の自然数をすべて列挙すると、3、5、6、および 9 になります。これらの倍数の合計は 23 です。3 または 5 のすべての倍数の合計を見つけます。 1000 未満です。自分のコードが正しい (または正しくない) と確信しています。codepad.org や ideone.com などの Web サイトでコードをコンパイルすると、「時間超過」と表示されます。コードの実行に時間がかかりすぎると思いますか? これはなぜですか?

私の解決策:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>

int main (int argc, char *argv[]){

    int i, j = 0;
    for (i = 1; i <= 1000; i++){   //Traverses all the positive numbers under 1000
        while ( (i % 5 == 0) || (i % 3 == 0)){  
               j = j + i;          //If it's a multiple of 3 or 5 add it to the sum
           }
    }

    printf("The sum of all multiples of 3 and 5 under 1000 is: %d", j);

    return 0;
}
4

1 に答える 1

4

そこには、whileステートメントであるべきステートメントがありifます。 テストしている条件が満たされたときにループ内whileの値を決して変更しないため、無限ループに陥ります。i

于 2013-08-03T14:49:02.717 に答える