Program przekracza limit czasowy, nie wiem co można tu jeszcze skrócić :/
//#include <cstdio>
#include <iostream>
using namespace std;
int T[65536];
int d;
unsigned short N;
//int T[65536]={3,14,7,6};
//int T[65536]={4096,2212,2213,3241};
//int T[65536]={2147483647,2147483646,2147483644,2147483645};
int main()
{
ios_base::sync_with_stdio(0);
// N=4;
cin>>N;
for (int j=0; j<N; j++)
{
cin>>T[j];
}
for (int j=0; j<N;j++)
{
d=0;
T[j]--;
while (T[j]>0)
{
d++;
T[j]=T[j]-d;
}
if (T[j]==0) cout <<"1 ";
else cout <<"0 ";
}
}
Rozpatrzmy nieskończony ciąg cyfr złożony z rosnących potęg 10 zapisanych jedna po drugiej. Początek takiego ciągu będzie wyglądał następująco: 110100100010000... Twoim zadaniem jest stwierdić jaka cyfra znajduje się na określonej pozycji w tym ciągu.
Wejście:
W pierwszej linii wejścia znajduję się liczba naturalna N < 65536. Kolejne N linii zawierają liczby naturalne i < 2^31 – numer pozycji w ciągu.
Wyjście:
Wyjściem powinno być N cyfr 0 lub 1 pooddzielanych spacją. i-ta cyfra powinna odpowiadać i-tej cyfrze w ciągu z i-tej pozycji wejścia.
Przykład:
Wejście:
4
3
14
7
6
Wyjście:
0 0 1 0
EDIT
Po zmianie kodu na wzór wyskakuje błędny wyniki :( oto zmieniony kod, ktoś ma pomysł gdzie może być błąd? (standardowo dla wszystkich sprawdzanych przykładów wychodzi tak jak powinno)
#include <iostream>
#include <math.h>
using namespace std;
int jaka_liczba (int a)
{
double pd=0;
int d=0;
double y=0;
d=1-(4*(-2*(a-1)));
pd=sqrt(d);
if ((int) pd!=pd) return 0;
else
{
y=(-1+pd)/2;
if ((int)y==y) return 1;
else return 0;
}
}
int x=0;
int n=0;
int main()
{
cin>>x;
//x=100;
for(int i=0;i<x;i++)
{
cin>>n;
cout<<jaka_liczba(n)<<" ";
}
return 0;}