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