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...

浙公网安备 33010602011771号