现在的位置: 首页 > 综合 > 正文

nyoj 1038 纸牌游戏

2017年10月13日 ⁄ 综合 ⁄ 共 1605字 ⁄ 字号 评论关闭

 poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。

一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。

代码如下:

 
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
    char c[5];
    int rk;
    char da[5];
    int num;
}s[4][15];

bool cmp(node a,node b)
{
    if(a.rk==b.rk) return a.num<b.num;
    return a.rk>b.rk;
}

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    char s1[150],s2[60],s3[2];
    while(~scanf("%s",s3))
    {
        scanf("%s%s",s1,s2);
        strcat(s1,s2);

        for(int i=0,j=0,cnt1=0;i<104;i+=2)
        {
            s[j][cnt1].c[0]=s1[i+1];
            if(s1[i+1]=='C')      s[j][cnt1].rk=4;
            else if(s1[i+1]=='D') s[j][cnt1].rk=3;
            else if(s1[i+1]=='S') s[j][cnt1].rk=2;
            else if(s1[i+1]=='H') s[j][cnt1].rk=1;

            s[j][cnt1].da[0]=s1[i];
            if(s1[i]>='2'&&s1[i]<='9') s[j][cnt1].num=s1[i]-'0';
            else if(s1[i]=='A') s[j][cnt1].num=14;
            else if(s1[i]=='T') s[j][cnt1].num=10;
            else if(s1[i]=='J') s[j][cnt1].num=11;
            else if(s1[i]=='Q') s[j][cnt1].num=12;
            else if(s1[i]=='K') s[j][cnt1].num=13;
            j++;
            if(j%4==0)
                cnt1++;
            j%=4;
        }

        for(int i=0;i<4;i++)
        sort(s[i],s[i]+13,cmp);

        int mark,i,sum;
        if(s3[0]=='S') mark=3;
        else if(s3[0]=='W') mark=2;
        else if(s3[0]=='N') mark=1;
        else  mark=0;

        for(sum=1;sum<5;sum++)
        {
            if(sum==1) printf("East player:\n");
            else if(sum==2) printf("South player:\n");
            else if(sum==3) printf("West player:\n");
            else  printf("North player:\n");

            printf("+---++---++---++---++---++---++---++---++---++---++---++---++---+\n");
            for(int k=0;k<13;k++)
                printf("|%s %s|",s[mark][k].da,s[mark][k].da);printf("\n");
            for(int k=0;k<13;k++)
                printf("| %s |",s[mark][k].c);printf("\n");
            for(int k=0;k<13;k++)
                printf("|%s %s|",s[mark][k].da,s[mark][k].da);printf("\n");
            printf("+---++---++---++---++---++---++---++---++---++---++---++---++---+\n");

            mark++;
            mark%=4;
         }
         printf("\n");
    }
    return 0;
}        

抱歉!评论已关闭.