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

Numim secvență fazan a unui şir de numere naturale un subşir al acestuia, format din termeni aflați pe poziții consecutive în șirul dat cu proprietatea că prima cifră a terme- nului curent este egală cu ultima cifră a termenului anterior. Lungimea secvenței este egală cu numărul de termeni ai acesteia. Fişierul bac.txt conține un șir de cel puțin două și cel mult 10° de numere naturale din intervalul [0, 10°]. Numerele sunt separate prin câte un spațiu, iar in şir există cel puțin doi termeni fazan pe poziții consecutive. Se cere să se determine o secvență fazan de lungime maximă în şirul aflat în fişier și să se afișeze pe ecran lungimea acestei secvențe. Pentru determinarea secvenței cerute se utilizează un algoritm eficient din punctul de vedere al memoriei necesare și al timpului de executare. Exemplu: dacă fişierul bac. txt conține numerele 12 13 31 123 321 61 76 25 54 425 511 121 311 311 atunci pe ecran se afișează valoarea 5.


boiustef: intervalul [0;10^???]

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("bac.txt");

long long ucp, a,b,secv,fazan;

int main()

{

   f >> a;

   ucp=a%10;

   while (f >> b)

   {

       a=b%10;

       while (b>9) b/=10;

       if (ucp==b) ++secv;

       else

       {

           if (secv>fazan)

               fazan=secv;

           secv=0;

       }

       ucp=a;

   }

   if (secv>fazan) fazan=secv;

   ++fazan;

   cout << fazan;

}

Explicație:

Variabile folosite:

ucp  - ultima cifra a precedentului

a - o variabila de lucru

b - termenul curent

secv - secventa cautata

fazan - secventa de lungime maxima

Alte întrebări interesante