poj1323

简而言之就是一个人手中有num张牌,然后拿出一张,再看看剩下的牌中有没有比它大的,有的话就ans+1,也就是输了一局;

AC代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1005

int cmp(const void *a,const void *b){
	return *(int *)a-*(int *)b;
}

int p1[N],p2[N];
bool vis[N];
int num,sum,ans;
int peo;//people

int main(){
	int i,j,k,count=1;
	while(scanf("%d%d",&peo,&num)==2,peo|num){
		sum=peo*num;
		memset(vis,false,sizeof(vis));
		for(i=0;i<num;i++){
			scanf("%d",&p1[i]);
			vis[p1[i]]=true;
		}
		for(i=sum,k=0;i>=1;i--){
			if(k==num)break;
			if(vis[i]==false)
				p2[k++]=i;
		}//取出剩下的最大的sum张牌,由大到小排列

		qsort(p1,num,sizeof(p1[0]),cmp);//由小到大排列
		/*qsort(p2,num,sizeof(p2[0]),cmp);//由小到大
		
		ans=0;//num-ans
		i=0;
		for(k=0;k<num;k++){
			if(p2[k]>p1[i]){
				ans++;
				i++;
				continue;
			}
		}*/
		ans=0;
		i=0;
		for(k=num-1;k>=0;k--)
		{
			if(p2[k]>p1[i]){
				ans++;
				i++;
				continue;
			}
		}
		printf("Case %d: ",count++);
		printf("%d\n",num-ans);
	}
	return 0;
}

  

keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2593243.html