fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. #include <vector>
  5. #include <sstream>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. class Klasemen {
  11. private:
  12. map<string, int> dataPoin;
  13.  
  14. public:
  15. // Mencatat hasil pertandingan
  16. void catatPermainan(string klubKandang, string klubTandang, string skor) {
  17. int skorKandang, skorTandang;
  18. // Memisahkan skor menjadi dua bilangan
  19. sscanf(skor.c_str(), "%d:%d", &skorKandang, &skorTandang);
  20.  
  21. // Jika klub belum ada di map, inisialisasi dengan 0
  22. if (dataPoin.find(klubKandang) == dataPoin.end()) dataPoin[klubKandang] = 0;
  23. if (dataPoin.find(klubTandang) == dataPoin.end()) dataPoin[klubTandang] = 0;
  24.  
  25. // Menentukan hasil pertandingan
  26. if (skorKandang > skorTandang) {
  27. dataPoin[klubKandang] += 3;
  28. } else if (skorKandang < skorTandang) {
  29. dataPoin[klubTandang] += 3;
  30. } else {
  31. dataPoin[klubKandang] += 1;
  32. dataPoin[klubTandang] += 1;
  33. }
  34. }
  35.  
  36. // Mengembalikan array klub dalam bentuk vector pasangan (klub, poin) dan diurutkan dari tertinggi
  37. vector<pair<string, int>> cetakKlasemen() {
  38. vector<pair<string, int>> klasemen(dataPoin.begin(), dataPoin.end());
  39.  
  40. // Urutkan berdasarkan poin (descending), lalu nama klub (ascending)
  41. sort(klasemen.begin(), klasemen.end(), [](auto &a, auto &b) {
  42. if (a.second != b.second)
  43. return a.second > b.second;
  44. return a.first < b.first;
  45. });
  46.  
  47. return klasemen;
  48. }
  49.  
  50. // Mengambil nama klub di peringkat tertentu (1 = teratas)
  51. string ambilPeringkat(int nomorPeringkat) {
  52. auto klasemen = cetakKlasemen();
  53. if (nomorPeringkat <= 0 || nomorPeringkat > klasemen.size()) {
  54. return "Peringkat tidak ditemukan.";
  55. }
  56. return klasemen[nomorPeringkat - 1].first;
  57. }
  58. };
  59.  
  60. // Contoh penggunaan
  61. int main() {
  62. Klasemen klasemen;
  63.  
  64. // Catat beberapa pertandingan
  65. klasemen.catatPermainan("Persija", "Arema", "2:1");
  66. klasemen.catatPermainan("Persib", "Persija", "1:1");
  67. klasemen.catatPermainan("Arema", "Persib", "0:3");
  68.  
  69. // Cetak klasemen
  70. vector<pair<string, int>> hasil = klasemen.cetakKlasemen();
  71. cout << "Klasemen Sementara:\n";
  72. for (int i = 0; i < hasil.size(); ++i) {
  73. cout << i + 1 << ". " << hasil[i].first << " - " << hasil[i].second << " poin" << endl;
  74. }
  75.  
  76. // Ambil peringkat ke-1
  77. cout << "\nPeringkat 1: " << klasemen.ambilPeringkat(1) << endl;
  78.  
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
Klasemen Sementara:
1. Persib - 4 poin
2. Persija - 4 poin
3. Arema - 0 poin

Peringkat 1: Persib