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


Elena și Maria au primit cadou un joc. Dintr-o cutie ce conține mai multe numere, fiecare extrage pe rand câte un număr și trebuie să descopere anumite condiții îndeplinite de aceste numere. Ele vor să determine câte numere alternante au fost extrase. Un număr este alternant dacă are număr impar de cifre și dacă orice cifră a numărului, cu excepția primei și a ultimei cifre se învecinează fie cu două cifre mai mari decât ea, fie cu două cifre mai mici decât ea.

Cerința
Cunoscând numărul n de numere, precum şi cele n numere naturale extrase din cutie determinați câte dintre acestea au fost alternante.

Date de intrare
Fișierul de intrare joc8.in conţine pe prima linie numărul n de numere naturale, iar pe următoarea linie cele n numere naturale.

Date de ieșire
Fișierul de ieșire joc8.out va conţine pe prima linie un număr ce reprezintă numărul numerelor alternante citite.

Restricții și precizări
1 < n < 1000000
cele n numere din joc au cel mult nouă cifre fiecare


boiustef: nu inteleg ???
boiustef: difst si difdr sunt diferentele de la stanga si dreapta fata de cifra c[i]
pmarian98: intr-un fel compar numerele intre prima si ultima cifra
pmarian98: prin dferenta
pmarian98: *i
boiustef: daca produsul lor este pozitiv inseamna ca diferentele au acelasi semn, adica fata de c[j cifrele sunt sau ambele mai mari, sau ambele mai mici , ma refer la cifrele vecine
boiustef: cercetez fiecare cifra cu vecinele sale
pmarian98: am inteles
boiustef: referitor la evitarea lui break .... se poate astfel:
for (j=2; j < k && alt==1; ++j)
{
difdr=-difst; difst=c[j]-c[j+1];
if (!(difst*difdr>0)) { alt=0; }
}
pmarian98: e buna si idea ta

Răspunsuri la întrebare

Răspuns de boiustef
3

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("joc8.in");

ofstream g("joc8.out");

short c[10], alt, k, j;

int i, n, num, difst, difdr, rez;

int main()

{

   f >> n;

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

   {

       f >> num;

       k=0;

       while (num)

       {

           ++k; c[k]=num%10;

           num/=10;

       }

       if (k%2)

       {

           if (k==1) ++rez;

           else

           {

              alt=1;

              difst=c[1]-c[2];

              for (j=2; j<k; ++j)

              {

                  difdr=-difst; difst=c[j]-c[j+1];

                  if (!(difst*difdr>0)) { alt=0; break; }

              }

              if (alt) ++rez;

           }

       }

   }

   g << rez;

   return 0;

}


Alte întrebări interesante