题意:两个人打牌,牌的大小按照2,3,4...9,T,J,Q,K,A排序,如果点数相等就按照H>S>D>C的花色排序。告诉你第一个人的手牌,让你安排第二个人的手牌,使得得分最大(按照顺序依次比较每张牌大小)
1 #include <iostream> 2 #include <algorithm> 3 #include <queue> 4 using namespace std; 5 int dot[300]; 6 int InputNum,NumOfCards,point; 7 int Adm[26],Eve[26]; 8 char str1,str2;//牌的点数和花型 9 void init(); 10 void process(); 11 int main() 12 { 13 //freopen("D:\\t.txt","r",stdin); 14 init(); 15 process(); 16 return 0; 17 } 18 void init(){//对数据进行初始化,将牌数*10 19 dot[‘T‘] = 100;dot[‘J‘] = 110;dot[‘Q‘] = 120;dot[‘K‘] = 130;dot[‘A‘] = 140; 20 for(int m = 2;m <= 9;m++){ 21 dot[m + ‘0‘] = m * 10; 22 } 23 dot[‘H‘] = 4;dot[‘S‘] = 3;dot[‘D‘] = 2;dot[‘C‘] = 1; 24 } 25 void process(){ 26 while(cin>>InputNum){ 27 for(int i = 0;i < InputNum;i++){ 28 cin>>NumOfCards; 29 point = 0; 30 //发牌 31 for(int k = 0;k < NumOfCards;k++){ 32 cin>>str1>>str2; 33 Adm[k]= dot[str1] + dot[str2];//将牌数扩大十倍,加上花色 34 } 35 for(int j = 0;j < NumOfCards;j++){ 36 cin>>str1>>str2; 37 Eve[j] = dot[str1] + dot[str2]; 38 } 39 // 40 sort(Adm,Adm + NumOfCards);//将两个人的牌数按升序排列 41 sort(Eve,Eve + NumOfCards); 42 for(int i = 0, j = 0;i < NumOfCards&&j < NumOfCards;){ 43 if(Eve[i] > Adm[j]){ 44 point++; 45 i++;j++; 46 } 47 else i++; 48 }//将两个人的牌按升序排列之后,进行比较 49 /*比如adm[3]={1,2,3},eve[3] = {1,2,3}; 50 第一次adm[0] = eve[0] 51 然后用eve[1]与adm[0]比较,eve[1]>adm[0]; 52 eve[2]>adm[1]; 53 就能求出eve胜adm多少次了*/ 54 cout<<point<<endl; 55 } 56 } 57 }
时间: 2024-11-06 22:21:01