Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <stdexcept>
- #include <set>
- #include <new>
- using namespace std;
- struct Dijete {
- string ime;
- Dijete *sljedeci = nullptr;
- };
- int BrojSlova (string s) {
- int brojac {};
- for(int i=0; i<s.size(); i++) {
- if((s.at(i) >= 'A' && s.at(i) <= 'Z') || (s.at(i) >= 'a' && s.at(i) <= 'z') || (s.at(i) >= '0' && s.at(i) <= '9')) brojac++;
- }
- return brojac;
- }
- vector<set<string>> Razvrstavanje(vector<string> v, int br_timova) {
- if(br_timova < 1 || br_timova > v.size()) throw logic_error ("Razvrstavanje nemoguce");
- vector<set<string>> razvrstani;
- int broj_djece = v.size();
- vector<int> vel_timova; // Broj clanova svakog tima smjestimo u vektor
- for(int i=0; i<br_timova; i++) {
- if(broj_djece%br_timova == 0) {
- vel_timova.push_back(broj_djece/br_timova);
- }else{
- int ostatak = broj_djece%br_timova;
- if(i<ostatak) vel_timova.push_back((broj_djece/br_timova)+1);
- else vel_timova.push_back(broj_djece/br_timova);
- }
- }
- Dijete *pocetak (nullptr), *zadnji (nullptr); // Kreiranje povezane liste
- for(int i=0; i<v.size(); i++) {
- Dijete *novi (new Dijete);
- novi -> ime = v.at(i);
- novi -> sljedeci = nullptr;
- if(!pocetak) pocetak = novi;
- else zadnji -> sljedeci = novi;
- zadnji = novi;
- if(i == v.size() - 1) zadnji -> sljedeci = pocetak;
- }
- /*cout << "Lista imena: ";
- Dijete *p = pocetak;
- for(int i=0; i<v.size(); i++) {
- cout << p->ime << endl;
- p = p -> sljedeci;
- }*/
- Dijete *pomocni (pocetak), *prethodni (zadnji), *pom1;
- pocetak = nullptr;
- zadnji = nullptr;
- for(int i=0; i<br_timova; i++) {
- set<string> pomocni_set;
- for(int j=0; j<vel_timova[i]; j++) {
- if(pomocni->ime == prethodni->ime) {
- pomocni_set.insert(pomocni -> ime);
- delete pomocni;
- pomocni = nullptr;
- prethodni = nullptr;
- break;
- }
- pomocni_set.insert(pomocni -> ime);
- int pomak = BrojSlova(pomocni -> ime);
- pomocni = pomocni -> sljedeci;
- // if(pom1 == pomocni) pom1 = nullptr;
- delete prethodni -> sljedeci;
- prethodni -> sljedeci = pomocni;
- // pom1 = pomocni;
- for(int k=0; k<(pomak-1); k++) {
- pomocni = pomocni -> sljedeci;
- }
- for(int l=0; l<(pomak-1); l++) {
- prethodni = prethodni -> sljedeci;
- }
- }
- razvrstani.push_back(pomocni_set);
- }
- return razvrstani;
- }
- int main ()
- {
- int n;
- cout << "Unesite broj djece: ";
- cin >> n;
- cout << "Unesite imena djece: " << endl;
- vector<string> imena (n);
- cin.ignore(10000, '\n');
- for(int i=0; i<n; i++) getline(cin, imena[i]);
- int br_timova;
- cout << "Unesite broj timova: ";
- cin >> br_timova;
- try {
- vector<set<string>> v (Razvrstavanje(imena, br_timova));
- for(int i=0; i<v.size(); i++) {
- set<string> pom = v.at(i);
- cout << "Tim " << i+1 << ": ";
- for(auto it = pom.begin(); it != pom.end(); it++) {
- if(distance(it, pom.end()) == 1) cout << *it << endl;
- else cout << *it << ", ";
- }
- }
- }
- catch(logic_error izuzetak) {
- cout << "Izuzetak: " << izuzetak.what() << endl;
- return 0;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement