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

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ăspunsuri la întrebare

Răspuns de bulbucadrian06
1

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 !!!


dariahappy: Multumesc mult!! Chiar se intelege!
bulbucadrian06: Cu mare placere ! Ma bucur !
Alte întrebări interesante