سلام
امروز من سورس الگوریتم قرعه کشی دوره ای به زبان سی پلاس پلاس (c++) قرار دادم.
برای مثال شما 4 نفر رو دارید میخواهند با هم به صورت دوره ای مسابقه بدهند!
دور اول و دور دوم و دور سوم که هیچ مسابقه ای تکراری نباشه مثل
a-b c-d
a-c b-d
a-d b-c
این کد اینکارو انجام میده
امید وارم به دردتون بخوره
#include <iostream> #include <string> #include <vector> using namespace std; bool in_array(vector<int> *players_done, int player); void roundRobin(int num) { num = (num > 0) ? (int)num : 4; num += num % 2; int opponent = 0; for (int round = 1; round < num; round++) { vector<int> players_done; for (int player = 1; player < num; player++) { if (!in_array(&players_done, player)) { // opponent. opponent = round - player; opponent += (opponent < 0) ? num : 1; if (opponent != player) { if ((player + opponent) % 2 == 0 ^ (player < opponent)) { // ^ = xor players_done.push_back(player); players_done.push_back(opponent); } else { players_done.push_back(opponent); players_done.push_back(player); } } } } if (round % 2 == 0) { opponent = (round + num) / 2; players_done.push_back(num); players_done.push_back(opponent); } else { opponent = (round + 1) / 2; players_done.push_back(opponent); players_done.push_back(num); } for (int i = 0; i < players_done.size(); i+=2) { cout << players_done.at(i) << "-" << players_done.at(i + 1) << " "; } cout << endl; players_done.clear(); } } bool in_array(vector<int> *players_done, int player) { for (int i = 0; i < players_done->size(); i++) { if (players_done->at(i) == player) return true; } return false; } int main() { int n = 6; roundRobin(n); system("PAUSE"); return 0; }