[C++] プロジェクトオイラー Problem6 技巧的な解き方

C++

最初の10個の自然数について, その二乗の和は,12 + 22 + … + 102 = 385

最初の10個の自然数について, その和の二乗は,(1 + 2 + … + 10)2 = 3025

これらの数の差は 3025 – 385 = 2640 となる.

同様にして, 最初の100個の自然数について二乗の和と和の二乗の差を求めよ.

ソースコード

#include <iostream>

using namespace std;

int main(void) {

  int ans = 0;
  for (int i = 1; i <= 100; i++) {
    for (int j = 100; j >= i + 1; j--) {
      ans += 2 * (i * j);
      //cout << "(" << i << "," << j << ")" << endl;
    }
  }

  cout << ans << endl;

}

多分みてもわからないと思います。

ちょっと詳しく説明していきます。

解説

まずは例題です。

上の画像でみて代々わかってきたかなと思います。

つまりこの問題の答えは a~d の組み合わせの和を2倍したものが答えになります

では1 ~ 100ではどうでしょうか?

と言った感じになります。

どうでしょうかね?

わかったらまたソースコードをみて確認してみてください。

今回は以上になります。

ではまた。

コメント

タイトルとURLをコピーしました