我试图制作一个让两支球队相互竞争的计划。每支球队都有相同数量的球员。让我们说球队1有球员A,B,C,D,球队2有球员E,F,G,H 在第1轮,玩家A与玩家E对抗。让我们说A赢了。然后A回到他的团队(我把它变成队列),所以团队1现在有玩家B,C,D,E。B进入失败者堆栈(所以我从团队2中弹出它并将其推送到新的队列叫做失败者堆栈。) 然后在第2轮,玩家B与玩家F对抗。依此类推,直到只有1支球队离开球员。
我无法弄清楚这样做的算法。我不是在寻找特定的代码(或任何人来做我的工作),我只是想了解人们如何做到这一点。我还没有学习映射,我只允许指针和基本功能。我的猜测是我必须做一些for循环,比如:
for (int i = 0; i < 4; i++){ //this is the loop for team 1, with 4 players
for (int j = 0; j < 4; j++) { //this is the for loop for team 2
//this is the part I need help with:
//somehow I need to call a player from team 1 from the queue
//and also call a player from team 2
}
}
有没有办法从队列中调用某些东西?任何意见,将不胜感激。非常感谢您的帮助!
答案 0 :(得分:3)
使用std::queue
的两个实例 - 每个团队一个。在开始时,与玩家一起填充它们。然后,执行一个for循环迭代rouds。在每一轮中,使用std::queue::pop
来获得每个团队的下一个玩家。选中获胜的玩家后,使用push
将获胜的玩家带回团队的队列末尾。
答案 1 :(得分:0)
int fight(Player &p1, Player &p2)
{
int result = 0; // 1 if p1 wins, 2 if p2 wins
// ...
return result;
}
然后你可以这样做:
std::queue<Player> team1;
std::queue<Player> team2;
std::queue<Player> losers;
while(team1.size() > 0 && team2.size() > 0) {
Player p1 = team1.front();
team1.pop();
PLayer p2 = team2.front();
team2.pop();
int result = fight(p1, p2);
if(result == 1) {
team1.push(p1);
losers.push(p2);
} else {
team2.push(p2);
losers.push(p1);
}
}