Advertisement
Guest User

Untitled

a guest
May 19th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <stdexcept>
  5. #include <set>
  6. #include <new>
  7.  
  8. using namespace std;
  9.  
  10. struct Dijete {
  11.  
  12. string ime;
  13. Dijete *sljedeci = nullptr;
  14. };
  15.  
  16. int BrojSlova (string s) {
  17.  
  18. int brojac {};
  19.  
  20. for(int i=0; i<s.size(); i++) {
  21. 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++;
  22. }
  23.  
  24. return brojac;
  25. }
  26.  
  27. vector<set<string>> Razvrstavanje(vector<string> v, int br_timova) {
  28.  
  29. if(br_timova < 1 || br_timova > v.size()) throw logic_error ("Razvrstavanje nemoguce");
  30.  
  31. vector<set<string>> razvrstani;
  32. int broj_djece = v.size();
  33.  
  34. vector<int> vel_timova; // Broj clanova svakog tima smjestimo u vektor
  35. for(int i=0; i<br_timova; i++) {
  36.  
  37. if(broj_djece%br_timova == 0) {
  38.  
  39. vel_timova.push_back(broj_djece/br_timova);
  40.  
  41.  
  42. }else{
  43.  
  44. int ostatak = broj_djece%br_timova;
  45.  
  46. if(i<ostatak) vel_timova.push_back((broj_djece/br_timova)+1);
  47. else vel_timova.push_back(broj_djece/br_timova);
  48.  
  49. }
  50. }
  51.  
  52. Dijete *pocetak (nullptr), *zadnji (nullptr); // Kreiranje povezane liste
  53.  
  54. for(int i=0; i<v.size(); i++) {
  55.  
  56. Dijete *novi (new Dijete);
  57. novi -> ime = v.at(i);
  58. novi -> sljedeci = nullptr;
  59.  
  60. if(!pocetak) pocetak = novi;
  61. else zadnji -> sljedeci = novi;
  62.  
  63. zadnji = novi;
  64. if(i == v.size() - 1) zadnji -> sljedeci = pocetak;
  65. }
  66.  
  67. /*cout << "Lista imena: ";
  68. Dijete *p = pocetak;
  69. for(int i=0; i<v.size(); i++) {
  70.  
  71. cout << p->ime << endl;
  72. p = p -> sljedeci;
  73. }*/
  74.  
  75.  
  76. Dijete *pomocni (pocetak), *prethodni (zadnji), *pom1;
  77. pocetak = nullptr;
  78. zadnji = nullptr;
  79. for(int i=0; i<br_timova; i++) {
  80.  
  81. set<string> pomocni_set;
  82.  
  83. for(int j=0; j<vel_timova[i]; j++) {
  84.  
  85. if(pomocni->ime == prethodni->ime) {
  86.  
  87.  
  88. pomocni_set.insert(pomocni -> ime);
  89. delete pomocni;
  90. pomocni = nullptr;
  91. prethodni = nullptr;
  92. break;
  93. }
  94.  
  95. pomocni_set.insert(pomocni -> ime);
  96. int pomak = BrojSlova(pomocni -> ime);
  97.  
  98. pomocni = pomocni -> sljedeci;
  99.  
  100. // if(pom1 == pomocni) pom1 = nullptr;
  101.  
  102. delete prethodni -> sljedeci;
  103. prethodni -> sljedeci = pomocni;
  104.  
  105. // pom1 = pomocni;
  106.  
  107. for(int k=0; k<(pomak-1); k++) {
  108. pomocni = pomocni -> sljedeci;
  109. }
  110. for(int l=0; l<(pomak-1); l++) {
  111. prethodni = prethodni -> sljedeci;
  112. }
  113. }
  114.  
  115. razvrstani.push_back(pomocni_set);
  116. }
  117.  
  118. return razvrstani;
  119. }
  120.  
  121. int main ()
  122. {
  123. int n;
  124.  
  125. cout << "Unesite broj djece: ";
  126. cin >> n;
  127.  
  128. cout << "Unesite imena djece: " << endl;
  129.  
  130. vector<string> imena (n);
  131.  
  132. cin.ignore(10000, '\n');
  133. for(int i=0; i<n; i++) getline(cin, imena[i]);
  134.  
  135. int br_timova;
  136. cout << "Unesite broj timova: ";
  137. cin >> br_timova;
  138.  
  139. try {
  140.  
  141. vector<set<string>> v (Razvrstavanje(imena, br_timova));
  142.  
  143. for(int i=0; i<v.size(); i++) {
  144.  
  145. set<string> pom = v.at(i);
  146.  
  147. cout << "Tim " << i+1 << ": ";
  148.  
  149. for(auto it = pom.begin(); it != pom.end(); it++) {
  150.  
  151. if(distance(it, pom.end()) == 1) cout << *it << endl;
  152. else cout << *it << ", ";
  153. }
  154. }
  155. }
  156. catch(logic_error izuzetak) {
  157. cout << "Izuzetak: " << izuzetak.what() << endl;
  158. return 0;
  159. }
  160.  
  161. return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement