纸牌游戏斗牛的最优算法?
就是发五张牌,从中选三张加起来是十的倍数,即为有牛(J,Q,K计为十),然后比较剩下两张加起来个位数的大小。然后设计一个算法可以判断是否有牛的问题。最…
关注者
27被浏览
15,3633 个回答
#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),花色前端用