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

Buna! Am de facut problema #189 NumarMunte de pe Pbinfo, dar este o problema cu algoritmul meu. Daca imi puteti spune de ce ar fii super!
Multumesc!

Anexe:

boiustef: salut... imi vine greu sa simt logica ta de rezolvare... daca te-ar multumi codul meu sa faci o comparatie si analiza, il postez...
iiDodovettee: Ar fii minunat! Cred ca nu intelegi la cele doua "if"-uri, nu-i asa?
boiustef: cred iti va fi clar, dar daca... scrii ..

Răspunsuri la întrebare

Răspuns de boiustef
1

#include <iostream>

using namespace std;

int m[12], cif[12];

int descreste(int a, int b)

{

   int ok=1;

   for (int i=a; i<b && ok; ++i)

       if (cif[i]<=cif[i+1]) ok=0;

   return ok;

}

int munte(int num)

{

      int nc=0;

      while (num)

      {

       ++nc; cif[nc]=num%10; num/=10;

      }

      int k=1;

      while (cif[k]<cif[k+1] && k<nc) ++k;

      if (k==1 || k==nc) return 0;

      else if (descreste(k, nc)) return 1;

      else return 0;

}

int main()

{

   int n, i, a;

   cin >> n;

   for (i=1; i<=n; ++i)

   {

       cin >> a;

       if (munte(a)) m[i]=1;

   }

   for (i=1; i<=n; ++i)

   {

       cout << m[i] << "\n";

   }

   return 0;

}



iiDodovettee: Ce inseamna "return ok", daca imi poti zice?
boiustef: returneaza valoarea lui ok , o sau 1
boiustef: 0 sau 1
iiDodovettee: Aa mersi.
Răspuns de Razzvy
1

Bună! Ai corectarea în fișierul atașat. Erau greșeli de neatenție (de exemplu:lipsea d=d/10 în al doilea while) și de logică (de ex. programul nu ar fi considerat un șir constant - ex. n=22 - strict crescător/descrescator; prin lipsa egalului din comparația c>cf sau c<cf).

Anexe:

Razzvy: Încă o chestie: puteai să păstrezi flag-ul "ok", dar eu am pus două variabile separate în loc de acesta, care verificau separat existența șirului descrescător, respectiv crescator, în număr.
iiDodovettee: Mersi foarte mult!
Alte întrebări interesante