这个题是用枚举+贪心的思路:

1、把自己的牌从大到小进行排序,存储到a数组里,然后把不是自己的牌,也从大到小,进行排序,存储到b数组里。

2、对自己的牌从大到小进行枚举,若当前的牌大于b中最大的牌,则这张牌是必赢的。若当前的牌小于b最大的牌,则这张牌不是一定赢的,然后枚举a中下一个元素,和b的下一个元素进行比较,循环下去……

源代码:

#include "stdio.h"
#include "string.h"
#include <algorithm>
using namespace std;
bool cmp(int x,int y)
{
	return x>y;
}
int main()
{
	int m,n,i,j,k;
	int a[1000],b[1000];
	int count,num;
	num=0; //存储进行了多少次试验
	//freopen("in.txt","r",stdin);
	while(scanf("%d%d",&m,&n))
	{	
		if(m==0)
			break;
		count=0; j=0; k=0;
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);
		sort(a,a+n,cmp);//对a数组中元素进行降序排序
		for(i=m*n;i>0;i--)
		{//把不是a中元素的牌,按降序存储到b中
			if(i>a[j])
				b[k++]=i;
			else
				j++;
		}
		k=0;
		for(i=0;i<n;i++)
		{
			j=k;
			if(a[i]>b[j])//最大元素进行比较
				count++;
			else
				k++;
		}
		num++;
		printf("Case %d: %d/n",num,count);
	}
	return 0;
}

老婆生病了,我不能照顾她,我很是伤心,无奈……