纸牌游戏斗牛的最优算法?

就是发五张牌,从中选三张加起来是十的倍数,即为有牛(J,Q,K计为十),然后比较剩下两张加起来个位数的大小。然后设计一个算法可以判断是否有牛的问题。最…
关注者
27
被浏览
15,363

3 个回答

#include <stdio.h>

typedef unsigned int U;

U next(U x){
    U s,r;
    s = x & (-x);
    r = s + x;
    x = r | (((x ^ r)>>2)/s);
    return x;
}


int main(){
    U x;
    int i,a[5],n,c;
    for(i=0;i<5;i++) scanf("%d",a+i);   
   
    for(x=0b00111; x <= 0b11100; x=next(x)){
        n = c = 0;
        for(i=0;i<5;i++){
            if(x&(1<<i)) n+=a[i];
            else c+=a[i];   
        }
        c %= 10;
        n %= 10;
        if(!n) break;
    }
    if(n) puts("None");
    else{
        for(i=0;i<5;i++) if(x & (1<<i)){
            printf("%d ",a[i]);
        }
        printf(": %d\n",c);
    }
   
}

1.计算5张牌(10-K都是0)之和获得余数x;

2.查询组成余数x的2张牌(策划穷举,x为1-9全部只有45种牌)是否存在,高大上说法用正则表达式;

3.存在即有牛,余数为牛x;

----------------

前端显示才需要花色,所以一张牌其实是花色(黑红梅方)+数值(13种,4种为0),花色前端用