Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //TP 2018/2019: Zadaća 3, Zadatak 5
- #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_pok (pocetak), *izbrisi, *preusmjeri;
- for(int i=0; i<br_timova; i++) {
- set<string> pomocni_set;
- for(int j=0; j<vel_timova[i]; j++) {
- pomocni_set.insert(pomocni_pok -> ime);
- int pomak = BrojSlova(pomocni_pok -> ime);
- if(pomocni_pok == pocetak) {
- zadnji -> sljedeci = pomocni_pok -> sljedeci;
- izbrisi = pomocni_pok;
- pocetak = pomocni_pok -> sljedeci;
- pomocni_pok = pomocni_pok -> sljedeci;
- delete izbrisi;
- }else{
- }
- for(int i=0; i<(pomak-1); i++) pomocni_pok = pomocni_pok -> 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