【FOJ】Problem 1113 Game Prediction

Problem 1113 Game Prediction.

题意

  • pip - a mark on a playing card
  • M个人,一开始每人分N张卡(卡的面值为最大N*M的正数,且面值各不相同)
    每轮游戏,每位玩家选一张牌和其他玩家比较,牌面最大的玩家获得本轮胜利,开始下一轮
    N轮结束后,获胜轮次最多的玩家赢得游戏
    给出一开始分的卡的面值,求至少能获胜的几轮
  • 输入:
    m (2<=m<=20),n (1<=n<=50)
    接着n个数字,表示牌的面值
    每组数据用空行隔开
  • 输出:
    Case x: y
    x为第几组数据,y为获胜的轮次

思路

对输入的数据做标记,然后划分两个数组:my_card[],others_card[],从大到小排序
遍历my_card[]:
① 如果my_card[i] > others_card[j](我手里最大的牌比别人最大的牌大),我必胜,i++(消耗掉这张牌),count++(获胜轮数+1)
② 如果我的手牌比别人最大的牌小,i++,j++(别人消耗掉这张牌)
直到我手里的牌用完,游戏结束,输出

代码

#include<cstdio>
#include<string.h>
using namespace std;

int my_card[51];
int others_card[1000];
int mark_card[1001];
int l_my = 0, l_others = 0;

int main(){
	int m, n, temp;
	int i, j, count, case_no = 1;
	while(scanf("%d %d", &m, &n)!=EOF){
		if(m==0 && n==0)
			break;
		l_my = 0;
		l_others = 0;
		count = 0;
		memset(mark_card, 0, sizeof(mark_card));
		for(i=0; i<n; i++){
			scanf("%d", &temp);
			getchar();	//吸收空格或回车
			mark_card[temp] = 1;
		}
		getchar();	//吸收空行
		for(i=m*n; i>0; i--){
			if(mark_card[i])
				my_card[l_my++] = i;
			else
				others_card[l_others++] = i;
		}
		i = 0;
		j = 0;
		for(; i<n; i++){
			if(my_card[i]>others_card[j])
				count++;
			else
				j++;
		}
		printf("Case %d: %d\n", case_no++, count);
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 0 · 访问量 320

猜你喜欢

转载自blog.csdn.net/qq_44531167/article/details/105278252