Uvod u algoritme kvadratni i trougaoni broj

https://petlja.org/BubbleBee/r/Problems/KvadratITrougao

Uradio sam zadatak i proverio resenje u code blocks ali mi za svaki test primer stoji da je odgovor pogresan.Da li neko mozda zna sta bi moglo biti u pitanju?

using namespace std;
int trougaoni(int n)
{

int zbir=0,i;
for(i=1;i<=n/4+1;i++){
    zbir+=i;
    if(zbir==n)return 1;

}
return 0;

}
int kvadrat(int n)
{
if(sqrt(n)*sqrt(n)==n)return 1;
else return 0;
}

int main()
{
int n,i;
cin >> n;
for(i=2;i<=n;i++)if(trougaoni(i)&&kvadrat(i))cout << i << " ";
return 0;
}

Probaj umesto
cout << i << " "
da stavis
cout << i << endl

N je veliko da bi radio sve ovo. Ne znam da li dobijas TLE? Iskoristi ovo: suma od 1 do k je k*(k+1)/2 tako da ides od 1 do nekog broja tako da je k*(k+1)/2 <=n i proveris da li je k*(k+1)/2 potpun kvadrat

Mislim da je ovde problem. Ako sam u pravu funkcija treba da proveri da li je n potpun kvadrat ali je moguce da sqrt(n)*sqrt(n)==n cak i kada n nije potpun kvadrat. Razlog zasto je tebi delovalo da ovo radi je zbog gubitka preciznosti cesce ce se desavati da funkcija vrati 0 ako broj nije potpun kvadrat mada to nece uvek biti slucaj.

Samo pazi, ako je n manje od 36 onda moras da stampas: cout << " "; inace ces dobiti RTE
A mushi i igzi su ti rekli sta su ti greske

Hvala na pomoci sad je ok.

Preporucujem ā€œ\nā€, jer endl i pored toga sto radi new line on flush-uje tekst, sto je nepotrebno i usporava program.

Probaj umesto sqrt(n)sqrt(n)==n da pises
for(int j=2;j
j<=n;j++)
{
if(j*j==n)return 1;
}
return 0;
Ovaj nacin je bolji jer ne mozes izgubiti preciznost, sve se radi s celim brojevima.