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

Am de rezolvat problema aceasta ce consta in aranjarea cuvintelor sub forma unor versuri. Am reusit sa impart cuvintele in functie de cat incap pe un vers doar ca nu inteleg cum ar trebui asezate acele "*". Daca stie cineva, va rog

Anexe:

andrei750238: A mai fost intrebarea de 5 ori cred pana acum pe site in ultima perioada, nu prea ii inteleg cerinta din pacate
teodortoderitap37w4j: Tot am sperat ca stie cineva. in principiu asez cuvintele pe o linie cat sa nu depaseasca lungimea y
teodortoderitap37w4j: doar ca acestea trebuie separate prin *
teodortoderitap37w4j: si sa fie diferenta de maxim o steluta intre cuvinte
teodortoderitap37w4j: adica am 3 cuvinte : afara este bine si y = 16 ->>> afara**este*bine
teodortoderitap37w4j: nu stiu pentru exemplul asta ce va afisa pentru y = 14
teodortoderitap37w4j: in enunt cere sa fie neaparat o stea intre cuvinte

Răspunsuri la întrebare

Răspuns de andrei750238
4

#include <iostream>

#include <vector>

#include <string>

using namespace std;

int main() {

int n, x, y;

string curent; //Cuvantul care e citit curent

string linie; //Linia curenta

vector<string> cuv_linie; //Vector de cuvinte de pe linia curenta

vector<string> f; //Vector de linii deja parcurse

//Citeste date

cin >> n >> x >> y;

for (int i = 0; i < n; i++) {

 //Citeste cuvant curent

 cin >> curent;

 //Daca cuvantul citit are loc pe linia curenta adauga

 if (linie.length() + curent.length() + cuv_linie.size() <= y) {

  cuv_linie.push_back(curent);

  linie += curent;

 }

 else {

  //Daca linia curenta e formata dintr-un cuvant adauga linia in vector final

  if (cuv_linie.size() == 1)

   linie = cuv_linie[0];

  else {

   //Numarul de despartiri intre cuvinte

   int nr_despartiri = cuv_linie.size() - 1;

   //Numarul total de stelute care trebuie adaugate

   int nr_stelute = y - linie.length();

   //Numarul de baza de stelute care trebuie adaugate intre doua cuvinte

   int nr_stelute_basic = nr_stelute / nr_despartiri;

   //Numarul de stelute care trebuie adaugate in plus intre primele cuvinte

   int nr_stelute_speciale = nr_stelute % nr_despartiri;

   

   //Initial linia e goala

   linie = "";

   //Pentru fiecare cuvant, adauga-l pe linie

   for (int i = 0; i < cuv_linie.size(); i++) {

    linie += cuv_linie[i];

    //Daca nu e ultimul cuvant de pe linie adauga stelutele de baza

    if (i != cuv_linie.size() - 1) {

     linie += string(nr_stelute_basic, '*');

     //Daca face parte din stelutele care trebuie adaugate in plus

     if (nr_stelute_speciale) {

      linie += '*';

      nr_stelute_speciale--;

     }

    }

   }

  }

  //Adauga linia in vector linii

  f.push_back(linie);

  //Linia e alcatuita acum din cuvantul curent

  linie = curent;

  //Sterge vectorul de cuvinte de pe linie, adauga cuvantul curent

  cuv_linie.clear();

  cuv_linie.push_back(curent);

 }

}

//Efectueaza operatiile pentru a adauga ultima linie.

if (cuv_linie.size() == 1)

 linie = cuv_linie[0];

else {

 int nr_despartiri = cuv_linie.size() - 1;

 int nr_stelute = y - linie.length();

 int nr_stelute_basic = nr_stelute / nr_despartiri;

 int nr_stelute_speciale = nr_stelute % nr_despartiri;

 linie = "";

 for (int i = 0; i < cuv_linie.size(); i++) {

  linie += cuv_linie[i];

  if (i != cuv_linie.size() - 1) {

   linie += string(nr_stelute_basic, '*');

   if (nr_stelute_speciale) {

    linie += '*';

    nr_stelute_speciale--;

   }

  }

 }

}

f.push_back(linie);

for (int i = 0; i < f.size(); i++) {

 //Afiseaza liniile

 cout << f[i] << endl;

 //Daca s-a atins numarul de linii per strofa lasa rand liber

 if ((i + 1) % x == 0) cout << endl;

}

}

► Cerinta

Mihnea este un producător muzical și compune versurile pentru melodiile marilor artiști. Când compune o piesă, acesta scrie fiecare cuvant pe un rând diferit, pentru a-i fi mai ușor să creeze rime si să facă modificările necesare versurilor. După ce termină de scris o piesă, acesta trebuie să o transcrie într-un caiet, într-o formă care poate fi înțeleasă de artiști.

Alte întrebări interesante