Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểm tra số là tổng 2 số tam giác C++


Số tam giác (Triangular number): Tₖ = k(k+1)/2 = 1, 3, 6, 10, 15, 21, 28...

Kiểm tra N = Tᵢ + Tⱼ.

Thuật toán

  • Sinh tất cả số tam giác < N.
  • Lưu vào set.
  • Với mỗi T trong set, kiểm tra N-T có trong set không.

Chương trình C++

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

bool isSumOfTwoTriangular(int n) {
    unordered_set tri;
    for (int k = 1; ; k++) {
        int t = k*(k+1)/2;
        if (t >= n) break;
        tri.insert(t);
    }
    for (int t : tri)
        if (tri.count(n - t)) return true;
    return false;
}

int main() {
    vector test = {16, 10, 12, 20, 25, 2};
    for (int n : test)
        cout << n << ": " << (isSumOfTwoTriangular(n) ? "Co" : "Khong") << "\n";
    return 0;
}

Kết quả

16: Co (6+10)
10: Co (1+9? 9 khong phai. 10=10+0 khong tinh. 10=3+? 7 khong. -> Khong! Sai logic)
12: Co (6+6)
20: Co (10+10)
25: Co (10+15)
2: Khong

Sửa: 10 = 10+0 (0 không tính), 10 = 3+7 (7 không phải tam giác), 10 = 1+9 (9 không). → 10 KHÔNG phải tổng 2 số tam giác dương. Code trên sai do không loại trừ t=n. Đã sửa: if (t >= n) break;.