栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1111 Poker Hands

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1111 Poker Hands

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct node{    int num,mark;} white[10],black[10];int cmp(node a,node b){    return a.num<b.num;}int  set(char c){    if(c<='9' && c>='2')        return c-'0';    if(c == 'T')        return 10;    if(c == 'J')        return 11;    if(c == 'Q')        return 12;    if(c == 'K')        return 13;    if(c == 'A')        return 14;    if(c == 'C')        return 1;    if(c == 'D')        return 2;    if(c == 'H')        return 3;    if(c == 'S')        return 4;}int up[10];int same(node *a){    int i,l = 0;    for(i = 2; i<=5; i++)        if(a[i].num!=a[i-1].num) up[l++] = i;    return l;}int judge(node *a){    int flag1 = 0;    int flag2 = 0;    if(a[1].mark == a[2].mark && a[2].mark == a[3].mark &&a[3].mark == a[4].mark &&a[4].mark == a[5].mark)        flag1 = 1;    if(a[1].num+1 == a[2].num && a[2].num+1 == a[3].num &&a[3].num+1 == a[4].num &&a[4].num+1 == a[5].num)        flag2 = 1;    if(flag1 && flag2)        return 1;   else  if(flag1 && !flag2)        return 4;    else if(flag2 && !flag1)        return 5;    int k = same(a);    if(k == 0)        return 2;    else if(k == 1)    {        if(up[0] == 2 || up[0] == 5) return 2;        if(up[0] == 3 || up[0] == 4) return 3;    }    else if(k == 2)    {        if(up[0] == 2 && up[1] == 3 || up[0] == 4 && up[1] == 5 || up[0] == 2 && up[1] == 5) return 6;        else return 7;    }    else if(k == 3)        return 8;    else if(k == 4)        return 9;    return 0;}int find_one(node *a){    int i;    for(i = 1; i<=5; i++)    {        if(i == 1 && a[i].num!=a[i+1].num) return 1;        if(i == 5 && a[i].num!=a[i-1].num) return 5;        if(a[i].num!=a[i-1].num && a[i].num!=a[i+1].num) return i;    }    return 0;}int find_pair(node *a){    int i;    for(i = 1; i<=5; i++)    {        if(i == 1 && a[i].num == a[i+1].num) return 2;        if(a[i].num == a[i-1].num) return i;    }    return 0;}int compare(int x){    int i,j,a,b;    if(x == 1 || x == 5)    {        if(white[5].num>black[5].num) return -1;        else if(white[5].num<black[5].num) return 1;        return 0;    }    else if(x == 2 || x == 3 || x == 6)    {        if(white[3].num>black[3].num) return -1;        else if(white[3].num<black[3].num) return 1;        return 0;    }    else if(x == 4 || x == 9)    {        for(i = 5; i>=1; i--)        { if(black[i].num<white[i].num)return -1; else if(black[i].num>white[i].num)     return 1;        }        return 0;    }    else if(x == 7)    {        if(white[4].num>black[4].num) return -1;        else if(white[4].num<black[4].num) return 1;        else        { if(white[2].num>black[2].num)     return -1; else if(white[2].num<black[2].num)     return 1; int a = find_one(white); int b = find_one(black); if(black[b].num<white[a].num)     return -1; else if(black[b].num>white[a].num)     return 1; return 0;        }    }    else if(x == 8)    {        int a = find_pair(white);        int b = find_pair(black);        int tem_w[10],tem_b[10],i,lb = 1,lw = 1;        if(white[a].num>black[b].num) return -1;        else if(white[a].num<black[b].num) return 1;        for(i = 1; i<=5; i++)        { if(i!=a && i!=a-1)     tem_w[lw++] = white[i].num; if(i!=b && i!=b-1)     tem_b[lb++] = black[i].num;        }        for(i = 3; i>=1; i--)        { if(tem_w[i]>tem_b[i])     return -1; else if(tem_b[i]>tem_w[i])     return 1;        }        return 0;    }    return 0;}int main(){    char str[5];    int sumb,sumw,j,k,i;    while(~scanf("%2s",str))    {        j = 1;        k = 1;        black[j].num = set(str[0]);        black[j++].mark = set(str[1]);        for(i = 2; i<=10; i++)        { scanf("%2s",str); if(i<6) {     black[j].num = set(str[0]);     black[j++].mark = set(str[1]); } else {     white[k].num = set(str[0]);     white[k++].mark = set(str[1]); }        }        sort(black+1,black+6,cmp);        sort(white+1,white+6,cmp);        sumb = judge(black);        sumw = judge(white);        if(sumb>sumw) printf("White wins.n");        else if(sumb<sumw) printf("Black wins.n");        else        { int flag = compare(sumb); if(flag == -1)     printf("White wins.n"); else if(flag == 1)     printf("Black wins.n"); else     printf("Tie.n");        }    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号