Rezolvare completă PbInfo #3356 alfa

Cerința

Se dă un șir format din n numere naturale. Se mai dă o valoare x și se garantează că șirul începe și se termină cu valoarea x. Transformați șirul astfel:

  • Elementele cu valoarea x rămân pe pozițiile lor;
  • Secvențele de elemente diferile de x aflate între două poziții cu valoarea x se ordonează crescător (între aceleași două elemente cu valoarea x se vor afla aceleași elemente ca la început dar în ordine crescătoare).

Date de intrare

Fișierul alfa.in conține pe prima linie un număr natural n reprezentând dimensiunea șirului și un număr x cu semnificația de mai sus. Pe linia a doua n numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.

Date de ieșire

Fișierul alfa.out conține cele n elemente ale șirului în ordinea cerută.

Restricții și precizări

  • 2 <= n <= 1000
  • Elementele șirului dat sunt naturale nenule formate din maximum 4 cifre
  • Pentru 40 de puncte șirul conține doar două elemente cu valoarea x (primul și ultimul).

Exemplu

alfa.in

10 3
3 4 1 2 3 7 9 8 3 3

alfa.out

3 1 2 4 3 7 8 9 3 3

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema alfa:

#include <fstream>

using namespace std;
int v[1001];
int n, x, p, i, j, aux, last;
int main () {
    ifstream fin ("alfa.in");
    ofstream fout("alfa.out");
    fin>>n>>x;
    for (i=1;i<=n;i++)
        fin>>v[i];
    last = n;
    for (p=n-1;p>=1;p--)
        if (v[p] == x) {
            int sortat;
            do {
                sortat = 1;
                for (i=p+1;i<=last-2;i++)
                    if (v[i] > v[i+1]) {
                        aux = v[i];
                        v[i] = v[i+1];
                        v[i+1] = aux;
                        sortat = 0;
                    }
            } while (sortat == 0);


            last = p;
        }
    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3356 alfa

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3356 alfa de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!