1. 程式人生 > >51Nod 1087 1 10 100 1000

51Nod 1087 1 10 100 1000

mat syn algorithm space turn ostream namespace style tin

如果將第二位看成第一位,那麽 k * (k+1) / 2都是1,k >= 1,那麽其他位都是 0

所以如果n-1=k*(k+1)/2 (n>1),則該位就是1

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     std::ios::sync_with_stdio(false);
 9     int t, n;
10     cin >> t;
11 while (t--){ 12 cin >> n; 13 if (n == 1){ cout << "1" << endl; continue; } 14 int k = sqrt(2 * (n - 1));//判斷2*n=k*(k+1) 15 for (int i = k;; i++){ 16 if (i*(i + 1) == 2 * (n - 1)){ 17 cout << "1" << endl;
18 break; 19 } 20 if (i*(i + 1) > 2 * (n - 1)){ 21 cout << "0" << endl; 22 break; 23 } 24 } 25 26 } 27 return 0; 28 }

51Nod 1087 1 10 100 1000