扑克牌问题(结构体实现)

ps:这道题使我想锤人,开始一直presentation error,就是你输出的计算结果是正确的,但是多了空格啊,换行啊等等,令人无语至极,还有那个啊啊啊啊啊啊啊啊啊,我这个题的算法也很差劲,仅供参考,勿喷,毕竟我还是个小白……

牌局由四个人构成,围成一圈。我们称四个方向为北 东 南 西。对应的英文是North,East,South,West。游戏一共由一副扑克,也就是52张构成。开始,我们指定一位发牌员(东南西北中的一个,用英文首字母标识)开始发牌,发牌顺序为顺时针,发牌员第一个不发自己,而是发他的下一个人(顺时针的下一个人)。这样,每个人都会拿到13张牌。

现在我们定义牌的顺序,首先,花色是(梅花)<(方片)<(黑桃)<(红桃),(输入时,我们用C,D,S,H分别表示梅花,方片,黑桃,红桃,即其单词首字母)。对于牌面的值,我们规定2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A。

现在你作为上帝,你要从小到大排序每个人手中的牌,并按照给定格式输出。(具体格式见输出描述和样例输出)。
在这里插入图片描述
我把输入数据粘贴出来把

Sample InputN
CTCAH8CJD4C6D9SQC7S5HAD2HJH9CKD3H6D6D7H3HQH4C5DKHKS9
SJDTS3S7S4C4CQHTSAH2D8DJSTSKS2H5D5DQDAH7C9S8C8S6C2C3

在这里插入图片描述

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct poker{
 char color;//花色 
 char element;//牌面值 
 int value;
};
struct poker pok_N[52];//北 
struct poker pok_E[52];//东 
struct poker pok_S[52];//南 
struct poker pok_W[52];//西
int change(char col,char ele){
 int cl,el,val;
 if(col == 'C') cl=0;
 if(col == 'D') cl=13;
 if(col == 'S') cl=26;
 if(col == 'H') cl=39;
 //牌面值
 if(ele == '2'){el=2;}if(ele == '3'){el=3;}if(ele == '4'){el=4;}
 if(ele == '5'){el=5;}if(ele == '6'){el=6;}if(ele == '7'){el=7;}
 if(ele == '8'){el=8;}if(ele == '9'){el=9;}if(ele == 'T'){el=10;}
 if(ele == 'J'){el=11;}if(ele == 'Q'){el=12;}if(ele == 'K'){el=13;}
 if(ele == 'A'){el=14;}
 val=cl+el;
 return val;
} 
bool cmp(poker a,poker b){
 return a.value<b.value;
}
int main(){
 char ple;string str1,str2;char str1_1[52][2];
 int tag,dog;//标签,跟踪狗 
 cin>>ple;
 while(ple != '#'){
  cin>>str1>>str2;
  tag=0;
  for(int j=0;j<52;j+=2){
   str1_1[tag][0]=str1[j];str1_1[tag][1]=str1[j+1];
   str1_1[tag+26][0]=str2[j];str1_1[tag+26][1]=str2[j+1];
   tag++;
  }
  dog=0;
  if(ple == 'N'){
      for(int i=0;i<13;i++){
       pok_E[i].color=str1_1[dog][0];pok_E[i].element=str1_1[dog][1];
          pok_S[i].color=str1_1[dog+1][0];pok_S[i].element=str1_1[dog+1][1];
       pok_W[i].color=str1_1[dog+2][0];pok_W[i].element=str1_1[dog+2][1];
       pok_N[i].color=str1_1[dog+3][0];pok_N[i].element=str1_1[dog+3][1];
       dog+=4;
    }
   }
  else if(ple == 'E'){
   for(int i=0;i<13;i++){
       pok_S[i].color=str1_1[dog][0];pok_S[i].element=str1_1[dog][1];
          pok_W[i].color=str1_1[dog+1][0];pok_W[i].element=str1_1[dog+1][1];
       pok_N[i].color=str1_1[dog+2][0];pok_N[i].element=str1_1[dog+2][1];
       pok_E[i].color=str1_1[dog+3][0];pok_E[i].element=str1_1[dog+3][1];
       dog+=4;
    }
   }
    
  else if(ple == 'S'){
   for(int i=0;i<13;i++){
       pok_W[i].color=str1_1[dog][0];pok_W[i].element=str1_1[dog][1];
          pok_N[i].color=str1_1[dog+1][0];pok_N[i].element=str1_1[dog+1][1];
       pok_E[i].color=str1_1[dog+2][0];pok_E[i].element=str1_1[dog+2][1];
       pok_S[i].color=str1_1[dog+3][0];pok_S[i].element=str1_1[dog+3][1];
       dog+=4;
    } 
   }
   
  else{
   for(int i=0;i<13;i++){
       pok_N[i].color=str1_1[dog][0];pok_N[i].element=str1_1[dog][1];
          pok_E[i].color=str1_1[dog+1][0];pok_E[i].element=str1_1[dog+1][1];
       pok_S[i].color=str1_1[dog+2][0];pok_S[i].element=str1_1[dog+2][1];
       pok_W[i].color=str1_1[dog+3][0];pok_W[i].element=str1_1[dog+3][1];
       dog+=4;
    }
   }
  for(int mo=0;mo<13;mo++){
   pok_E[mo].value=change(pok_E[mo].color,pok_E[mo].element);
   pok_W[mo].value=change(pok_W[mo].color,pok_W[mo].element);
   pok_N[mo].value=change(pok_N[mo].color,pok_N[mo].element);
   pok_S[mo].value=change(pok_S[mo].color,pok_S[mo].element);
  }
  sort(pok_E,pok_E+13,cmp);sort(pok_S,pok_S+13,cmp);
  sort(pok_N,pok_N+13,cmp);sort(pok_W,pok_W+13,cmp);
  cout<<"South player:"<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_S[mh].element<<" "<<pok_S[mh].element;
   if(mh==12) cout<<"|"; 
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"| "<<pok_S[mh].color<<" ";
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_S[mh].element<<" "<<pok_S[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  //cout<<endl;
  cout<<"West player:"<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_W[mh].element<<" "<<pok_W[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"| "<<pok_W[mh].color<<" ";
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_W[mh].element<<" "<<pok_W[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  //cout<<endl;
  cout<<"North player:"<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_N[mh].element<<" "<<pok_N[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"| "<<pok_N[mh].color<<" ";
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_N[mh].element<<" "<<pok_N[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  //cout<<endl;
  cout<<"East player:"<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_E[mh].element<<" "<<pok_E[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"| "<<pok_E[mh].color<<" ";
   if(mh==12) cout<<"|";
  } cout<<endl;
  for(int mh=0;mh<13;mh++){
   cout<<"|"<<pok_E[mh].element<<" "<<pok_E[mh].element;
   if(mh==12) cout<<"|";
  } cout<<endl;
  cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
  cout<<endl;
  cin>>ple;
 }
 return 0;
}

这可怕的输出,我枯了。#<>#.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值