SH06-200 Số tam giác: Một số N được gọi là số tam giác nếu biểu diễn nó dưới dạng lưới hình tam giác, sao cho các điểm tạo thành hình tam giác. Tức là hàng đầu tiên 1 điểm, hàng thứ 2 có 2 điểm, hàng thứ 3 có 3 điểm... Vd: Số 1, 3,6,10... là các số tam giác Yêu cầu: Cho số nguyên dương N, hãy cho biết N có phải số tam giác không? Mô tả đầu vào Dòng 1: Ghi số nguyên dương T là số bộ Test T dòng tiếp theo mỗi dòng ghi số nguyên dương N Ràng buộc 1\leq T \leq 100; 1\leq N \leq 10^71≤T≤100;1≤N≤10 7 Mô tả đầu ra T dòng ghi số: 1 : Nếu N là số tam giác 0 : Nếu N không phải số tam giác Hướng dẫn: • Nhận xét: Nếu N là số tam giác thì N có dạng N=1+2+3+...+k =k(k+1)/2 • Bài toán trở thành kiểm tra xem N có phải là số có dạng k(k+1)/2 không? o Cách 1: n=k(k+1)/2 => 2n=k(k+1) =>k gần bằng sqrt(2n) để chắc ăn ta thử từ k=sqrt(2n)+1 về chú ý điều kiện để thử while(k(k+1)/2>n) khi vòng lặp dừng lại ta kiểm tra giá trị k đó xem k(k+1)/2=n không nếu bằng in 1 else in 0 Cách xuất kết quả không cần sử dụng if khi kiểm tra k cout<<(k*(k+1)/2!=n"0\n":"1\n");* Test case mẫu Đầu vào mẫu 1 5 3 4 6 55 345 Đầu ra mẫu 1 1 0 1 1 0 C++ nha

2 câu trả lời

Đáp án:

#include <bits/stdc++.h>

using namespace std;
long long t,n[100001],z[100001];
int main()
{
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        z[i]=0;
        cin>>n[i];
        while(n[i]>0)
        {
            z[i]++;
            n[i]=n[i]-z[i];
        }
    }
    for(int i=1;i<=t;i++)
    {
        if(n[i]==0) cout<<"1"<<endl;
        else cout<<"0"<<endl;
    }
    return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        int k = (sqrt(8 * n + 1) - 1) / 2;
        cout << (k * (k + 1) / 2 == n) << '\n';
    }
    return 0;
}