Informatică, întrebare adresată de edymocanu, 8 ani în urmă

Fişierul BAC.TXT conŃine un şir de cel mult 1000 de numere naturale, despărŃite prin câte un spaŃiu, fiecare număr având cel mult 9 cifre. Cel puŃin două numere din fişier sunt pătrate perfecte. Se citeşte şirul din fişier şi se cere ca, utilizând un algoritm eficient din punct de vedere al memoriei utilizate şi al timpului de executare, să se determine şi să se afişeze pe ecran lungimea maximă a unei secvenŃe a şirului care începe şi se încheie cu câte un număr pătrat perfect. O secvenŃă este formată din termeni aflaŃi pe poziŃii consecutive în şir. Lungimea unei secvenŃe este egală cu numărul de termeni ai acesteia.
Exemplu dacă fişierul BAC.TXT conŃine numerele 11 245 36 67 8 576 11 16 41 144 67 89 1011 pe ecran se afişează 8 (corespunzător secvenŃei 36 67 8 576 11 16 41 144).

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

#include <iostream>

#include <fstream>

#include <cmath>

using namespace std;

ifstream f("bac.txt");

int num, p, s;

bool pp(int m )

{

   int x=sqrt(m);

   if (x*x==m) return true;

   else return false;

}

int main()

{

   while (f >> num)

   {

       if (pp(num))

       {

           p=1; s=1; break;

       }

   }

   while (f>> num)

   {

       ++p;

       if (pp(num)) s=p;

   }

   cout << s;

}

Explicație:


edymocanu: Salut, poti sa imi explici daca p e primu si s ce este ?
edymocanu: Este cumva indicele de sfarsit al secventei?
boiustef: s este lungimea secventei, iar p este o numaratoare de la primul pp gasit, iar s se actualizeaza la urmatorul pp gasit, iar p isi continua numaratoarea in nadejdea de a mai gasi alt pp
boiustef: cum il gaseste, s devine p. Deoarece logica e sa gasim primul pp si ultimul pp
boiustef: Daca observi in cod, am gasit primul pp si am initializat s=1; p=1
Alte întrebări interesante