给出开始的牌的大小,求最少胜出几轮。 初始化一个数组从1开始按递增排序,手中的牌递减排序,从最大的开始比较,若其他人的牌最大的都小于手中的某张牌,则胜出一轮,进行计数。否则他人胜出,将大的那张牌置0,避免重复计数。 #include <iostream> #include <vector> #include <algorithm> int cmp(int &a,int &b) { return a>b; } using namespace std; int list[2000]; vector<int> play; int main() { int m,n,tmp,st,cnt,num=1,sz; while(cin>>m>>n) { if(m==0&&n==0) break; //init play.clear(); st=n*m; cnt=0; for(int i=1;i<=n*m;++i) list[i]=i; //input and sort for(int i=0;i<n;++i) { cin>>tmp; play.push_back(tmp); list[tmp]=0; } sort(play.begin(),play.end(),cmp); sz=play.size(); int tag=n*m; //计数 for(int i=0;i<sz;++i) { while(list[tag]==0) --tag; if( list[tag] < play[i] ) ++cnt; else { list[tag]=0; --tag; } } printf("Case %d: %d/n",num++,cnt); } return 0; }