👤

Se dă un șir a1, a2, …, an de numere întregi. Se dau de asemenea numerele întregi x și k. Să se determine:
a) Cea mai din stânga poziție p din șir cu a[p] = x
b) Cea mai din dreapta poziție q din șir cu a[q] = x
c) Poziția r a celei de-a k-a apariții a lui x în șir.

Programul citește de la tastatură numărul n, iar apoi n numere întregi, separate prin enter, reprezentând elementele șirului. În final, de pe ultimele două linii, se citesc numerele x și k.

Programul va afișa pe ecran, separate prin enter, valorile p, q și r. Dacă x nu apare în vector, atunci p și q vor fi egale cu 0, iar dacă x nu apare de cel puțin k ori, atunci r va fi 0.

toate numerele citite la intrare sunt cuprinse între -1.000 și 1.000 și n și k sunt numere naturale nenule

Date intrare:
4
1
2
1
2
1
4

Date iesire:
1
3
0


(Este problema 4037 pe pbinfo) Multumesc anticipat!!


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int v[100001]; // nu precizeaza cat de mare este vectorul, deci am ales eu o valoare

int main()

{

   unsigned int n;

   cin >> n;

   int x, k;

   

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

       cin >> v[i];

   cin >> x >> k;

   int st, dr; // cea mai din stanga, respectiv dreapta pozitie a lui x

   st = dr = 0; // initializam 0, "Dacă x nu apare în vector, atunci p și q vor fi egale cu 0"

   for (int i = 1; i <= n / 2; ++i)

   {

       if (v[i] == x)

       {

           st = i;

           break;

       }

   }

   

   for (int i = n; i >= n / 2; --i)

   {

       if (v[i] == x)

       {

           dr = i;

           break;

       }

   }

   int cnt = 0, poz = 0; // contor pentru a afla la a cata aparietie a lui x suntem, respectiv a k - a pozitie a lui x

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

   {

       if (v[i] == x)  

           cnt++; // am gasit o aparitie

       if (cnt == k)

       {

           poz = i; // pozitia devine pozitia curenta

           break; // am gasit ce trebuia, ne oprim

       }

   }

   cout << st << '\n' << dr << '\n' << poz;

   return 0;

}

Explicație:

Ai explicatia in cod, probabil nu este cel mai eficient, dar este cel mai usor de inteles dupa parerea mea. Succes !!!

Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, vă rugăm să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la lista de favorite!


Ze Learners: Alte intrebari