けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AOJ Course ITP1_7_B How many ways?

for 文を多重にするタイプの全探索!!!

問題へのリンク

問題概要

整数  N, X が与えられる。 1 以上  N 以下の整数の中から重複なしで 3 個選んで、総和が  X となる組合せが何通りあるか求めよ (順番はなし)。

制約

  •  3 \le N \le 100
  •  0 \le X \le 300

考えたこと

for 文を多重にするタイプの全探索を書く練習に。計算量は  O(N^{3})

C++

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, X;
    while (cin >> N >> X, N) {
        int res = 0;
        for (int i = 1; i <= N; ++i) {
            for (int j = i+1; j <= N; ++j) {
                for (int k = j+1; k <= N; ++k) {
                    if (i + j + k == X) ++res;
                }
            }
        }
        cout << res << endl;
    }
}

Python

while True:
    N, X = map(int, input().split())
    if N == 0:
        break
    res = 0
    for i in range(1, N+1):
        for j in range(i+1, N+1):
            for k in range(j+1, N+1):
                if i + j + k == X:
                    res += 1
    print(res)