Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <set>
  5. struct Dijete {
  6. std::string ime;
  7. Dijete *sljedeci;
  8. };
  9. bool JelOk(char s)
  10. {
  11. if (s>='0' && s<='9' || s>='A' && s<='Z'|| s>='a' && s<='z') return true; //provjerava jel slovo i cifra
  12. return false;
  13. }
  14. int IzbrojiSlova (std::string s)
  15. {
  16. int br(0);
  17. for (int i=0; i<s.length(); i++) if (JelOk(s.at(i))) br++;
  18. return br;
  19. }
  20. std::vector<std::set<std::string>> Razvrstavanje (std::vector<std::string> imena, int broj_timova)
  21. {
  22. if (broj_timova<1 || broj_timova>imena.size()) throw std::logic_error("Razvrstavanje nemoguce");
  23. std::vector<std::set<std::string>> vektor_skupova;
  24. if (imena.size()<=0) return vektor_skupova;
  25.  
  26. Dijete *pocetak=nullptr, *prethodni, *novi=nullptr;
  27. for (int i=0; i<imena.size(); i++) {
  28. novi=new Dijete{imena.at(i), nullptr};
  29. if (!pocetak) pocetak=novi;
  30. else prethodni->sljedeci=novi;
  31. prethodni=novi;
  32. }
  33. prethodni->sljedeci=pocetak;
  34. int vel=imena.size(), koliko(0), kolicina; // broj djece, koliko +1, kolicina djece u normalnim
  35. kolicina=vel/broj_timova;
  36. if (vel%broj_timova!=0) koliko=vel%broj_timova;
  37. int provjera(0), posebni(0);
  38. if (koliko!=0) kolicina++;
  39. auto poc=pocetak;
  40. auto pre=prethodni;
  41. while (provjera!=broj_timova) {
  42. std::set<std::string> skup;
  43. if (koliko==posebni && koliko!=0) kolicina--;
  44. posebni++;
  45. for (int k=0; k<kolicina; k++) {
  46. int brojac=0;
  47. int br=IzbrojiSlova(poc->ime);
  48. skup.insert(poc->ime);
  49. auto brisi=poc;
  50. poc=poc->sljedeci;
  51. while (brojac!=br-1) {
  52. if (pre->sljedeci==poc) {
  53. skup.insert(pre->ime);
  54. delete brisi;
  55. break;
  56. } else {
  57. pre->sljedeci=poc;
  58. poc=poc->sljedeci;
  59. if (brojac==0) delete brisi;
  60. brojac++;
  61. }
  62. }
  63. if (pre->sljedeci==poc) break;
  64. }
  65. vektor_skupova.push_back(skup);
  66. skup.clear();
  67. provjera++;
  68. }
  69.  
  70.  
  71. return vektor_skupova;
  72. }
  73.  
  74. int main ()
  75. {
  76. try {
  77. std::vector<std::string> djeca;
  78. int broj_djece, broj_timova;
  79. std::cout << "Unesite broj djece: ";
  80. std::cin >> broj_djece;
  81. std::cin.ignore(10000, '\n');
  82. std::cout << "Unesite imena djece: ";
  83. for (int i=0; i<broj_djece; i++) {
  84. std::string rijec;
  85. std::getline(std::cin, rijec);
  86. djeca.push_back(rijec);
  87. }
  88. std::cout << "\nUnesite broj timova: ";
  89. std::cin >> broj_timova;
  90. auto timovi=Razvrstavanje(djeca, broj_timova);
  91. for (int i=0; i<broj_timova; i++) {
  92. std::cout << "Tim " << i+1 << ": ";
  93. int br(0);
  94. for (auto s:timovi.at(i)) {
  95. if (br==timovi.at(i).size()-1) std::cout << s;
  96. else std::cout << s << ", ";
  97. br++;
  98. }
  99. std::cout << std::endl;
  100. }
  101. } catch (std::logic_error e) {
  102. std::cout << "Izuzetak: " << e.what();
  103. }
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement