Informatică, întrebare adresată de stassahul, 9 ani în urmă

De ce programului meu imi da 0pcte pe pbinfo?

Intrebare: (#1932)
Gigel vrea un calculator nou care are prețul x. Tatăl acestuia, fiind profesor de matematica, i-a spus ca îi va cumpăra calculatorul dacă prețul x al acestuia este norocos. Un număr x este norocos dacă pătratul acestuia se poate scrie ca sumă de x numere consecutive. De exemplu, x = 7 este număr norocos deoarece, 7 * 7 = 4 + 5 + 6 + 7 + 8 + 9 + 10.

Gigel a obţinut T oferte de preț și dorește să știe pentru fiecare dintre acestea dacă prețul este corespunzătoare restricției pe care i-a impus-o tatăl său.

Date de intrare
Fișierul de intrare pc.in conține pe prima linie un singur număr natural T, reprezentând numărul de oferte. Pe a doua linie se află T numere naturale x1 x2 x3 … xT separate prin câte un spaţiu, cu semnificația din enunț.

Date de ieșire
Fișierul de ieșire pc.out va conține pe prima linie, separate prin câte un spațiu, cele T răspunsuri, în ordine.

Restricții și precizări
x < 2.000.000.000
T < 10

Exemplu
pc.in

3
3 4 7
pc.out

1 0 1


Programul meu:
#include

using namespace std;

ifstream fin("pc.in");
ofstream fout("pc.out");

int T,x;

int main()
{

fin >> T;

int k;

for(int i=1;i<=T;i++)
{
fin >> x;
if ((x*x - (x * (x - 1) / 2)) % x == 0) k=1;
else k=0;
fout << k << " ";
}

return 0;

}

Daca nu puteti correcta programul, scrieti unul de 100 pcte!

Răspunsuri la întrebare

Răspuns de express
12
Pentru ca cele doua raspunsuri au fost raportate ca abuz le-am sters si am sa-ti dau o solutie de 100p la aceasta problema. Succes!
#include <fstream>
using namespace std;
ifstream f("pc.in");
ofstream g("pc.out");
int T,x;
 
int main()
{
    f>>T;
    while(T--)
    {
        f>>x;
        if(x%2)
            g<<1<<' ';
        else
            g<<0<<' ';
    }
    return 0;
}


stassahul: Mersi :)
express: explicatia consta in faptul ca numerele norocoase intotdeauna sunt numere impare
stassahul: As dori sa inteleg si eu de ce, dar in fine :)
express: te lamuresc imediat....
express: m este norocos -> m^2=a+(a+1)+(a+2)+…+(a+m-1) - > m^2=m*a+(m-1)*m /2 ->
2*m^2= 2*m*a+(m-1)*m ->2*m= 2*a+m-1 ->m= 2*a-1 -> m număr impar, a=(m+1)/2
express: unde m^2 inseamna m la patrat si -> inseamna rezulta
stassahul: Wow, iti multumesc mult, nu cred ca mias da seama la asa concluzie fara tine :)
express: cu placere!
Alte întrebări interesante