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;
}