Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <set>
- struct Dijete {
- std::string ime;
- Dijete *sljedeci;
- };
- bool JelOk(char s)
- {
- if (s>='0' && s<='9' || s>='A' && s<='Z'|| s>='a' && s<='z') return true; //provjerava jel slovo i cifra
- return false;
- }
- int IzbrojiSlova (std::string s)
- {
- int br(0);
- for (int i=0; i<s.length(); i++) if (JelOk(s.at(i))) br++;
- return br;
- }
- std::vector<std::set<std::string>> Razvrstavanje (std::vector<std::string> imena, int broj_timova)
- {
- if (broj_timova<1 || broj_timova>imena.size()) throw std::logic_error("Razvrstavanje nemoguce");
- std::vector<std::set<std::string>> vektor_skupova;
- if (imena.size()<=0) return vektor_skupova;
- Dijete *pocetak=nullptr, *prethodni, *novi=nullptr;
- for (int i=0; i<imena.size(); i++) {
- novi=new Dijete{imena.at(i), nullptr};
- if (!pocetak) pocetak=novi;
- else prethodni->sljedeci=novi;
- prethodni=novi;
- }
- prethodni->sljedeci=pocetak;
- int vel=imena.size(), koliko(0), kolicina; // broj djece, koliko +1, kolicina djece u normalnim
- kolicina=vel/broj_timova;
- if (vel%broj_timova!=0) koliko=vel%broj_timova;
- int provjera(0), posebni(0);
- if (koliko!=0) kolicina++;
- auto poc=pocetak;
- auto pre=prethodni;
- while (provjera!=broj_timova) {
- std::set<std::string> skup;
- if (koliko==posebni && koliko!=0) kolicina--;
- posebni++;
- for (int k=0; k<kolicina; k++) {
- int brojac=0;
- int br=IzbrojiSlova(poc->ime);
- skup.insert(poc->ime);
- auto brisi=poc;
- poc=poc->sljedeci;
- while (brojac!=br-1) {
- if (pre->sljedeci==poc) {
- skup.insert(pre->ime);
- delete brisi;
- break;
- } else {
- pre->sljedeci=poc;
- poc=poc->sljedeci;
- if (brojac==0) delete brisi;
- brojac++;
- }
- }
- if (pre->sljedeci==poc) break;
- }
- vektor_skupova.push_back(skup);
- skup.clear();
- provjera++;
- }
- return vektor_skupova;
- }
- int main ()
- {
- try {
- std::vector<std::string> djeca;
- int broj_djece, broj_timova;
- std::cout << "Unesite broj djece: ";
- std::cin >> broj_djece;
- std::cin.ignore(10000, '\n');
- std::cout << "Unesite imena djece: ";
- for (int i=0; i<broj_djece; i++) {
- std::string rijec;
- std::getline(std::cin, rijec);
- djeca.push_back(rijec);
- }
- std::cout << "\nUnesite broj timova: ";
- std::cin >> broj_timova;
- auto timovi=Razvrstavanje(djeca, broj_timova);
- for (int i=0; i<broj_timova; i++) {
- std::cout << "Tim " << i+1 << ": ";
- int br(0);
- for (auto s:timovi.at(i)) {
- if (br==timovi.at(i).size()-1) std::cout << s;
- else std::cout << s << ", ";
- br++;
- }
- std::cout << std::endl;
- }
- } catch (std::logic_error e) {
- std::cout << "Izuzetak: " << e.what();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement