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

va rog mult vreau rezolvare in c++
Spunem că un vector este palindrom de tip vale dacă sunt îndeplinite urmatoarele două condiţii :
• elementele egal depărtate de capetele vectorului sunt egale
• valorile sunt în ordine descrescătoare de la capătul din stânga la mijlocul vectorului şi apoi sunt crescătoare până la capătul din dreapta
De exemplu vectorul cu elementele 10 7 4 3 3 4 7 10 îndeplineşte condiţiile de mai sus.

Să se verifice dacă cele n valori numere naturale din fişierul de intrare pot fi rearanjate astfel încăt să formeze un vector palindrom de tip vale.
Dacă este posibil se va afişa în fişierul de iesire vectorul obţinut.
Dacă nu este posibil se va afişa -1.

Date de intrare
• de pe prima linie a fişierului palindrom.in se citeşte n număr natural.
• de pe următoarea linie se citesc n numere naturale

Date de ieşire
În fişierul palindrom.out se va afişa după caz:

Dacă se poate forma vectorul palindrom de tip vale :
• pe prima linie se afişează elementele vectorului obţinut separate printr-un spaţiu

Dacă nu se poate forma vectorul palindrom de tip vale :
• pe prima linie valoarea -1


Restricţii şi precizări
• 1 ≤ n ≤ 10000
• Cele n numere sunt numere naturale din intervalul [1,10000]

Exemplu
palindrom.in
palindrom.out
11
16 12 18 16 18 12 7 30 5 7 5


-1


7
10 23 4 17 10 23 17
23 17 10 4 10 17 23


guiatitioxcy11y: trimite.mi nr problemei poate am facut.o

Răspunsuri la întrebare

Răspuns de AfloareiAndrei
2

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

 ifstream infile("palindrom.in");     //deschid fisierul "palindrom.in"

 ofstream outfile("palindrom.in");   //deschid fisierul "palindrom.out"

 bool afiseaza = false;

 int marime_sir, comutator;

 infile >> marime_sir;   //introduc marimea sirului

 int sir[marime_sir] = {};

 for(int i=0; i<marime_sir; i++)   //introduc numerele in sir

   {

     infile >> sir[i];

   }

 //sortez sirul palindrom

 for(int o=0; o<marime_sir; o++)

   {

     for(int x=0; x<(marime_sir-1); x++)

{

  if(x < marime_sir/2)   //sortez prima juatate a sirului descrescator

    {

      if(sir[x] < sir[x+1])

 {

   comutator = sir[x];

   sir[x] = sir[x+1];

   sir[x+1] = comutator;

 }

    }

  else if(x > (marime_sir/2))   //sortez a doua jumatae a sirului crescator

    {

      if(sir[x] > sir[x+1])

 {

   comutator = sir[x];

   sir[x] = sir[x+1];

   sir[x+1] = comutator;

 }

    }

}

   }

 //verifica daca sirul este palindrom

 for(int v=0; v<marime_sir; v++)

   {

     if(sir[v] == sir[marime_sir-v-1])

{

  afiseaza = true;

}

     else

{

  afiseaza = false;

  break;

}

   }

 //afiseaza rezultatul in "palindrom.out"

 if(afiseaza)

   {

     for(int a=0; a<marime_sir; a++)

{

  outfile << sir[a] << " ";

}

     outfile << endl;

   }

 else

   {

     outfile << "-1" << endl;

   }

 infile.close();  //inchid fisierul "palindrom.in"

 outfile.close();  //inchid fisierul "palindrom.out"

 return(0);

}

Explicație:

am lasat comentarii in cod

Alte întrebări interesante