求 牛牛 游戏的算法, 和算 24 点差不多。(200)

  • 主题发起人 主题发起人 32881
  • 开始时间 开始时间
3

32881

Unregistered / Unconfirmed
GUEST, unregistred user!
数组: 1...10随机取其中五个数字, 例如: 74589如果任意其中三数相加,结果为 10 的倍数, 则另外两数相加结果为牛数。 如上边结果为: 7 + 4 + 9 = 20, 5 + 8 = 13 , 结果为 : 牛三。再例如: 99761相加结果凑不成 10 的倍数, 结果为无牛。 9 数最大。再例如 14526相加结果为 145 为 10的1倍, 2 + 6 = 8 ,则为牛八,赢翻一倍。牛八才开始翻,以下不翻倍。再例如: 145 28相加结果为: 145 = 10 28 = 10 , 结果就为 牛牛, 赢翻 三倍,只有牛牛翻三倍。再例如: 22221其中有四个一样的,结果为 炸弹, 赢 4 倍。求任意输入五个数后,该如何实现这样的算法啊?
 
...implementationuses Math;var PAI:array[1..5] of Integer;const cZH:array[1..8,1..3] of Integer= ( (1,2,3), (1,2,4), (1,3,4), (1,3,5), (2,3,4), (2,3,5), (2,4,5), (3,4,5) );procedure PaiXu;var i,j,k:integer;begin for i:=1 to 4 do for j:=1 to 4 do begin if PAI[j]>PAI[j+1] then begin k:=PAI[j]
PAI[j]:=PAI[j+1]
PAI[j+1]:=k
end
end;end;function CheckNiu(var value:Integer):Boolean;var i:Integer
TmpPAI:array[1..5] of Integer;begin result:=True
value:=-1
for i:=1 to 8 do if (PAI[cZH[1]]+PAI[cZH[2]]+PAI[cZH[3]]) mod 10=0 then begin Move(PAI,TmpPAI,5*SizeOf(Integer))
TmpPAI[cZH[1]]:=0
TmpPAI[cZH[2]]:=0
TmpPAI[cZH[3]]:=0
value:=(TmpPAI[1]+TmpPAI[2]+TmpPAI[3]+TmpPAI[4]+TmpPAI[5]) mod 10
exit
end
if ((PAI[1]=PAI[2]) and (PAI[1]=PAI[3]) and (PAI[1]=PAI[4])) or ((PAI[2]=PAI[3]) and (PAI[2]=PAI[4]) and (PAI[2]=PAI[5])) then begin value:=-PAI[2]
exit
end
result:=False;end;procedure TForm1.Button1Click(Sender: TObject);var i:Integer;begin for i:=1 to 5 do PAI:=StrToInt(edit1.Text)
PaiXu
if CheckNiu(i) then begin if i=0 then edit2.Text:='牛牛' else if i<0 then edit2.Text:='炸弹'+IntToStr(-i) else edit2.Text:='牛'+inttostr(i)
end else edit2.Text:='无牛,'+IntToStr(PAI[5])+'最大';end;没有考虑3张牌相同的情况,也没有考虑10以上的牌,只是符合楼主的要求,不符合真正的斗牛规则
 
感谢您的回答,,已经接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部