题意:一种纸牌游戏,每张牌上有一个编号,编号唯一。每一局游戏,每个玩家将会有等量的手牌。
每一回合,每个玩家打出一张牌,牌编号最大的玩家该回合胜利。最后,胜利最多的玩家获得当局
的胜利。现给定一副手牌,问这副手牌在一局游戏中至少能胜利几个回合。
每一回合,每个玩家打出一张牌,牌编号最大的玩家该回合胜利。最后,胜利最多的玩家获得当局
的胜利。现给定一副手牌,问这副手牌在一局游戏中至少能胜利几个回合。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;
const int N = 1005;
int a[N]; // 纸牌编号
int flag[N]; // 是不是我的牌
int used[N]; // 有没有用过这张牌
int main() {
int m, n, i, j, ca = 0;
while(~scanf("%d%d", &m, &n), m|n) {
memset(flag, 0, sizeof(flag));
memset(used, 0, sizeof(used));
for(i = 0; i < n; i++) {
scanf("%d", a+i);
flag[a[i]] = 1;
}
int ans = n;
for(i = m*n; i > 0; i--) {
if(!flag[i]) {
for(j = i-1; j >= 0; j--) {
if(flag[j] && !used[j]) { // 我自己的牌,并且我没有用过的。
ans--;
used[j] = 1;
break;
}
}
}
}
printf("Case %d: %d\n", ++ca, ans);
}
system("pause");
return 0;
}
本文探讨了一种基于纸牌编号的策略性游戏,详细介绍了如何通过算法确定每回合的胜利者,以及如何计算玩家在一局游戏中的胜局数。文章提供了C++代码实现,帮助读者理解并应用游戏策略。

被折叠的 条评论
为什么被折叠?



