fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm> //random_shuffle
  5. #include <ctime> //time
  6. #include <cstdlib> //srand
  7. #include <set> //multiset
  8.  
  9. struct SinhVien {
  10. typedef bool (*Comparator)(const SinhVien&, const SinhVien&);
  11. std::string ten;
  12. int diem;
  13. SinhVien(const std::string& t="", int d=0) : ten(t), diem(d) {}
  14. static bool cmpByScore(const SinhVien& lhs, const SinhVien& rhs)
  15. { return lhs.diem < rhs.diem; };
  16. };
  17.  
  18. int main()
  19. {
  20. srand(time(0));
  21. std::vector<SinhVien> lopHoc;
  22.  
  23. // nhập sv
  24. std::string ten;
  25. int diem;
  26. while (std::cin >> ten >> diem) lopHoc.emplace_back(ten, diem);
  27.  
  28. // xáo trộn ngẫu nhiên lopHoc
  29. std::random_shuffle(lopHoc.begin(), lopHoc.end());
  30. // xuất danh sách nhóm, mỗi nhóm tối đa 6 sv
  31. const int MAX_STUD_PER_GROUP = 6;
  32. int groupId = 1, groupCount = 0;
  33. for (const auto& sv : lopHoc)
  34. {
  35. if (!groupCount) std::cout << "\nNhóm " << groupId << ": " << sv.ten;
  36. else std::cout << ", " << sv.ten;
  37. if (++groupCount == MAX_STUD_PER_GROUP) ++groupId, groupCount = 0;
  38. }
  39. std::cout << "\n";
  40.  
  41. // tạo danh sách sv có điểm tăng dần
  42. std::multiset<SinhVien, SinhVien::Comparator>
  43. dssv(lopHoc.begin(), lopHoc.end(), SinhVien::cmpByScore);
  44. // xuất danh sách điểm từ thấp đến cao
  45. std::cout << "\nDanh sách lớp học (điểm từ thấp đến cao)\n";
  46. for (const auto& sv : dssv)
  47. std::cout << sv.ten << ": " << sv.diem << "\n";
  48. // chèn thêm 1 sv tên Mai có điểm 7
  49. dssv.emplace("Mai", 7); //hoặc dssv.insert(newSv);
  50. // xuất danh sách lớp học sau khi chèn
  51. std::cout << "\nDanh sách lớp học sau khi chèn\n";
  52. for (const auto& sv : dssv)
  53. std::cout << sv.ten << ": " << sv.diem << "\n";
  54.  
  55. }
Success #stdin #stdout 0s 3420KB
stdin
Anh 7
Bình 7
Cát 5
Dũng 6
Yến 9
Hùng 10
Tiến 8
Hải 7
Phượng 5
Chi 4
Nghĩa 9
Bảo 8
Phụng 6
An 2
Sĩ 4
Vy 4
Phát 6
Quang 9
Chiến 5
Châu 7
Sang 5
Liên 3
Kim 1
Phước 7
stdout
Nhóm 1: Hải, Sĩ, Quang, Phát, Chi, Vy
Nhóm 2: Hùng, Cát, Kim, Tiến, Chiến, Bình
Nhóm 3: An, Anh, Sang, Liên, Bảo, Dũng
Nhóm 4: Phụng, Nghĩa, Châu, Yến, Phước, Phượng

Danh sách lớp học (điểm từ thấp đến cao)
Kim: 1
An: 2
Liên: 3
Sĩ: 4
Chi: 4
Vy: 4
Cát: 5
Chiến: 5
Sang: 5
Phượng: 5
Phát: 6
Dũng: 6
Phụng: 6
Hải: 7
Bình: 7
Anh: 7
Châu: 7
Phước: 7
Tiến: 8
Bảo: 8
Quang: 9
Nghĩa: 9
Yến: 9
Hùng: 10

Danh sách lớp học sau khi chèn
Kim: 1
An: 2
Liên: 3
Sĩ: 4
Chi: 4
Vy: 4
Cát: 5
Chiến: 5
Sang: 5
Phượng: 5
Phát: 6
Dũng: 6
Phụng: 6
Hải: 7
Bình: 7
Anh: 7
Châu: 7
Phước: 7
Mai: 7
Tiến: 8
Bảo: 8
Quang: 9
Nghĩa: 9
Yến: 9
Hùng: 10