色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

用Python枚舉法求解24點(diǎn)游戲:排列組合與表達(dá)式求值的完整實(shí)現(xiàn)

用Python枚舉法求解24點(diǎn)游戲:排列組合與表達(dá)式求值的完整實(shí)現(xiàn) 最近跟朋友聊起算法題無(wú)意間聊到24點(diǎn)游戲順手用Python寫了個(gè)枚舉法求解器。這個(gè)題目看起來(lái)簡(jiǎn)單——給4張牌用加減乘除湊出24但真正落地成代碼時(shí)涉及排列組合、表達(dá)式構(gòu)造、求值精度這些細(xì)節(jié)踩了一圈坑之后倒是個(gè)不錯(cuò)的算法練手項(xiàng)目。這篇文章就用枚舉法一步步拆解24點(diǎn)問(wèn)題的求解過(guò)程分享一份可直接運(yùn)行的Python實(shí)現(xiàn)代碼以及我自己調(diào)試時(shí)踩過(guò)的幾個(gè)坑。1. 24點(diǎn)問(wèn)題的本質(zhì)與枚舉法選型1.1 題目定義與問(wèn)題拆解24點(diǎn)游戲的核心規(guī)則很簡(jiǎn)單從一副撲克牌中隨機(jī)抽取4張牌每張牌的點(diǎn)數(shù)在1到13之間J/Q/K分別對(duì)應(yīng)11/12/13允許使用加、減、乘、除四種運(yùn)算以及括號(hào)要求4張牌全部且僅使用一次最終計(jì)算結(jié)果等于24。很多人小時(shí)候玩過(guò)這個(gè)游戲但用程序解決時(shí)需要把“手算”的思路翻譯成計(jì)算機(jī)能執(zhí)行的邏輯。我先把這個(gè)問(wèn)題的本質(zhì)拆開來(lái)看數(shù)字層面4張牌每張牌必須且只能使用一次。運(yùn)算層面3個(gè)運(yùn)算符每個(gè)運(yùn)算符從加減乘除中任選其一允許重復(fù)。結(jié)構(gòu)層面3個(gè)運(yùn)算符決定表達(dá)式的結(jié)構(gòu)但括號(hào)的存在讓結(jié)構(gòu)變得復(fù)雜比如(ab)×(cd)和ab×cd是兩種完全不同的表達(dá)式結(jié)構(gòu)。枚舉法的核心思路就是“窮舉所有可能性”——把所有可能的數(shù)字排列方式、運(yùn)算符組合方式、括號(hào)結(jié)構(gòu)方式全部列出來(lái)逐一計(jì)算看哪個(gè)組合的結(jié)果等于24。這個(gè)思路直白但關(guān)鍵在于搜索空間到底有多大、怎么組織枚舉順序才不重不漏。1.2 為什么枚舉法足夠解決這類問(wèn)題先說(shuō)結(jié)論24點(diǎn)的搜索空間非常小用枚舉法完全可行而且代碼寫起來(lái)比動(dòng)態(tài)規(guī)劃、回溯搜索要直白得多。計(jì)算一下搜索空間的大小4張牌的全排列4! 24種。3個(gè)運(yùn)算符的排列4^3 64種每個(gè)位置有加減乘除四種選擇允許重復(fù)。括號(hào)結(jié)構(gòu)如果直接枚舉括號(hào)需要區(qū)分5種基本結(jié)構(gòu)后面會(huì)詳細(xì)說(shuō)。三者相乘24 × 64 × 5 7680種情況。哪怕是Python這種解釋型語(yǔ)言在一秒內(nèi)跑完7680次四則運(yùn)算也毫無(wú)壓力實(shí)際計(jì)算耗時(shí)基本在幾十毫秒級(jí)別。這個(gè)規(guī)模意味著我們不需要什么高深的剪枝優(yōu)化老老實(shí)實(shí)把每種可能都算一遍就是最穩(wěn)妥的方案。當(dāng)然如果想要更高性能可以事先把所有可能的表達(dá)式樹結(jié)構(gòu)固化下來(lái)避免運(yùn)行時(shí)重復(fù)構(gòu)造也可以先用奇偶性、整除性做簡(jiǎn)單剪枝。但對(duì)于學(xué)習(xí)算法、或者只是做個(gè)工具腳本來(lái)說(shuō)這些優(yōu)化不是必須的。枚舉法的價(jià)值在于“邏輯簡(jiǎn)單、不容易出錯(cuò)、一定能找到解如果有解的話”——這三點(diǎn)在做算法題時(shí)比性能更寶貴。2. 枚舉策略與表達(dá)式結(jié)構(gòu)2.1 三層枚舉數(shù)字排列、運(yùn)算符選擇、括號(hào)形狀枚舉過(guò)程可以分成三個(gè)獨(dú)立維度分別枚舉后再組合成完整表達(dá)式第一層數(shù)字排列4張牌的全排列用itertools.permutations一行搞定。這里有個(gè)小細(xì)節(jié)如果輸入的4張牌里存在重復(fù)點(diǎn)數(shù)比如[3, 3, 8, 8]permutations會(huì)生成重復(fù)排列。稍后去重時(shí)可以考慮這點(diǎn)但在基礎(chǔ)版里先不做處理因?yàn)橛?jì)算結(jié)果不受影響只是會(huì)輸出多條重復(fù)解。第二層運(yùn)算符組合3個(gè)運(yùn)算符的64種組合用itertools.product生成。注意product(ops, repeat3)和permutations的區(qū)別product允許重復(fù)選擇同一個(gè)運(yùn)算符permutations不允許。這里需要出現(xiàn) 這樣的組合所以必須用product。第三層括號(hào)結(jié)構(gòu)括號(hào)是24點(diǎn)里最容易繞暈的部分。我采用的方案是“枚舉5種基礎(chǔ)表達(dá)式結(jié)構(gòu)”因?yàn)?個(gè)數(shù)字、3個(gè)運(yùn)算符的二元運(yùn)算樹binary tree一共有5種不同形狀。這個(gè)數(shù)字是卡特蘭數(shù)C35正好對(duì)應(yīng)Catalan數(shù)的第3項(xiàng)。5種結(jié)構(gòu)如下用a, b, c, d代表4張牌x, y, z代表3個(gè)運(yùn)算符((a x b) y c) z d(a x (b y c)) z da x ((b y c) z d)a x (b y (c z d))(a x b) y (c z d)有的讀者可能會(huì)問(wèn)(a x (b y c)) z d和((a x b) y c) z d看起來(lái)差不多為什么要算兩種因?yàn)樗鼈儗?duì)應(yīng)的計(jì)算順序不同可能導(dǎo)致不同結(jié)果。比如數(shù)字[1, 2, 3, 4]((12)3)×424而(1(23))×424雖然結(jié)果相同但結(jié)構(gòu)不同。枚舉時(shí)寧多勿缺把5種全列出來(lái)最保險(xiǎn)。2.2 用逆波蘭表達(dá)式統(tǒng)一處理括號(hào)直接枚舉中綴表達(dá)式再套括號(hào)代碼寫起來(lái)容易出錯(cuò)尤其是要?jiǎng)討B(tài)生成(ab)×(c-d)這種字符串。我的做法是改用逆波蘭表達(dá)式Reverse Polish NotationRPN來(lái)統(tǒng)一表達(dá)。逆波蘭表達(dá)式的特點(diǎn)是操作數(shù)在前運(yùn)算符在后不需要括號(hào)就能唯一確定運(yùn)算順序。比如中綴表達(dá)式(ab)×(c-d)轉(zhuǎn)成RPN就是a b c d - ×。這樣做的好處很明顯5種括號(hào)結(jié)構(gòu)在RPN里就變成“操作數(shù)的排列順序”和“運(yùn)算符的插入位置”的組合。求值時(shí)只需要一個(gè)棧遇到操作數(shù)入棧遇到運(yùn)算符彈出兩個(gè)數(shù)計(jì)算結(jié)果再入棧邏輯極其簡(jiǎn)單。避免了中綴表達(dá)式中嵌套括號(hào)的字符串拼接地獄。具體到代碼實(shí)現(xiàn)我不用在RPN層面計(jì)算運(yùn)算符的排列位置——只要枚舉數(shù)字全排列、運(yùn)算符組合、以及5種“括號(hào)結(jié)構(gòu)模板”每個(gè)模板對(duì)應(yīng)的是一組操作數(shù)索引序列和運(yùn)算符索引序列。以模板5(a x b) y (c z d)為例它的RPN形式是a b x c d z y。也就是說(shuō)操作數(shù)順序是[a, b, c, d]運(yùn)算符順序是[x, z, y]。每種模板都可以預(yù)先定義好這兩個(gè)序列這樣枚舉時(shí)就只需要填充具體數(shù)值和具體運(yùn)算符不需要?jiǎng)討B(tài)生成表達(dá)式樹。3. 完整代碼實(shí)現(xiàn)3.1 基礎(chǔ)版全排列枚舉 RPN求值我先把基礎(chǔ)版代碼貼出來(lái)。這份代碼能跑、能求出結(jié)果但存在重復(fù)解的問(wèn)題后面會(huì)逐步優(yōu)化。from itertools import permutations, product def solve_24_basic(cards): ops_list [, -, *, /] # 5種括號(hào)結(jié)構(gòu)模板每個(gè)模板對(duì)應(yīng)RPN的操作數(shù)和操作符順序 # (op1, op2, op3) 的排列順序由每個(gè)模板決定 # 這里用模板索引實(shí)際使用時(shí)映射到具體運(yùn)算符 templates [ ([0, 1, 2, 3], [0, 1, 2]), # ((a op0 b) op1 c) op2 d ([0, 1, 2, 3], [0, 2, 1]), # (a op0 (b op1 c)) op2 d ([0, 1, 2, 3], [0, 2, 1]), # a op0 ((b op1 c) op2 d) 不同結(jié)構(gòu) ([0, 1, 2, 3], [1, 0, 2]), # a op0 (b op1 (c op2 d)) ([0, 1, 2, 3], [1, 2, 0]), # (a op0 b) op1 (c op2 d) ] # 第二和第三個(gè)模板在RPN層面操作符順序一樣但求值時(shí)因?yàn)闂5倪\(yùn)算順序不同 # 實(shí)際效果也不同這里簡(jiǎn)化處理用操作符順序來(lái)區(qū)分。 results [] for p in permutations(cards): for ops in product(ops_list, repeat3): for t in templates: rpn_ops [ops[i] for i in t[1]] if eval_rpn(list(p), rpn_ops) 24: expr rpn_to_infix(list(p), rpn_ops) results.append(expr) return results def eval_rpn(nums, ops): stack [] num_idx 0 op_idx 0 # 簡(jiǎn)單起見(jiàn)先把RPN序列構(gòu)造出來(lái)再統(tǒng)一求值 rpn [] # 4個(gè)數(shù)字 3個(gè)運(yùn)算符的RPN序列可以預(yù)先用模板構(gòu)建 # 這里為了演示邏輯先用一個(gè)輔助函數(shù)計(jì)算 return _eval_from_rpn(nums, ops) def _eval_from_rpn(nums, ops): # 這個(gè)函數(shù)負(fù)責(zé)真正計(jì)算下文給出完整實(shí)現(xiàn) pass看到這里你應(yīng)該發(fā)現(xiàn)了上面只是骨架真正的計(jì)算邏輯還沒(méi)寫完。下面給出可以落地的完整版。3.2 用Fraction避免浮點(diǎn)精度問(wèn)題24點(diǎn)實(shí)現(xiàn)里最容易翻車的地方是浮點(diǎn)數(shù)判等。舉個(gè)例子8 ÷ (3 - 8/3)其中8/3 2.666...計(jì)算結(jié)果正好等于24但在浮點(diǎn)數(shù)運(yùn)算里可能是23.999999999996或者24.000000000002。如果直接判斷result 24很可能得到False導(dǎo)致漏解。解決辦法有兩個(gè)用abs(result - 24) 1e-9做近似比較。用分?jǐn)?shù)運(yùn)算Python標(biāo)準(zhǔn)庫(kù)的fractions.Fraction直接保證精確。我在實(shí)現(xiàn)里選了Fraction。原因是24點(diǎn)題目本身是“精確等于24”不是“近似等于24”用分?jǐn)?shù)徹底杜絕精度問(wèn)題。另一個(gè)隱藏的好處是Fraction會(huì)自動(dòng)約分中間結(jié)果不會(huì)出現(xiàn)分?jǐn)?shù)越滾越大導(dǎo)致計(jì)算緩慢的情況當(dāng)然在這個(gè)題目里本來(lái)就不大。求值部分的完整實(shí)現(xiàn)如下from fractions import Fraction def eval_rpn(nums, ops): nums: 4個(gè)數(shù)字對(duì)應(yīng)RPN中的操作數(shù)順序 ops: 3個(gè)運(yùn)算符對(duì)應(yīng)RPN中的運(yùn)算符順序 返回Fraction類型結(jié)果如果不能計(jì)算(除零)返回None stack [] num_idx 0 op_idx 0 # 把數(shù)字先按順序轉(zhuǎn)成Fraction fracs [Fraction(x) for x in nums] # 用一個(gè)指針遍歷RPN序列 # RPN序列長(zhǎng)度固定為74個(gè)數(shù)字 3個(gè)運(yùn)算符 for i in range(7): # 前4個(gè)位置是數(shù)字后3個(gè)位置是運(yùn)算符這個(gè)假設(shè)需要模板保證 # 更穩(wěn)妥的方法是根據(jù)ops的使用次數(shù)判斷但這里固定模板就是43 if i 4: stack.append(fracs[num_idx]) num_idx 1 else: op ops[op_idx] op_idx 1 b stack.pop() a stack.pop() if op : stack.append(a b) elif op -: stack.append(a - b) elif op *: stack.append(a * b) elif op /: if b 0: return None stack.append(a / b) if len(stack) ! 1: return None return stack[0]這里有個(gè)值得注意的細(xì)節(jié)RPN求值時(shí)運(yùn)算符彈出操作數(shù)的順序是后進(jìn)的先彈出。也就是說(shuō)對(duì)于減法a - b棧頂?shù)谝粋€(gè)彈出的是b第二個(gè)是a計(jì)算時(shí)應(yīng)該是a - b而不是b - a。很多初學(xué)者在這里寫反導(dǎo)致減法順序錯(cuò)誤、結(jié)果全對(duì)不上。除法同理。3.3 輸出人眼可讀的中綴表達(dá)式RPN適合計(jì)算但直接輸出8 3 8/3 3 ÷ - ÷給用戶看閱讀成本太高。所以要把RPN轉(zhuǎn)回帶括號(hào)的中綴表達(dá)式。轉(zhuǎn)換思路是給每個(gè)操作數(shù)包一層“括號(hào)保護(hù)”每次運(yùn)算時(shí)把兩個(gè)子表達(dá)式拼接成(左表達(dá)式 運(yùn)算符 右表達(dá)式)。由于每個(gè)子運(yùn)算都加了括號(hào)最終表達(dá)式雖然冗余比如(8 ÷ (3 - (8 ÷ 3)))但優(yōu)先級(jí)完全正確不需要額外判斷。def rpn_to_infix(nums, ops): stack [] num_idx 0 op_idx 0 for i in range(7): if i 4: stack.append(str(nums[num_idx])) num_idx 1 else: op ops[op_idx] op_idx 1 b stack.pop() a stack.pop() stack.append(f({a} {op} )) return stack[0]這個(gè)邏輯簡(jiǎn)單粗暴但輸出結(jié)果一定是對(duì)的。如果你希望輸出更簡(jiǎn)潔去掉最外層括號(hào)、去掉某些多余的括號(hào)可以在最后再做一次字符串處理但作為求解器準(zhǔn)確比美觀更重要。3.4 完整求解代碼把所有部分拼起來(lái)得到一份可以直接跑的完整代碼from itertools import permutations, product from fractions import Fraction def solve_24(cards): ops_list [, -, *, /] # RPN模板數(shù)字順序固定 [0,1,2,3]運(yùn)算符順序各有不同 # 5種模板的RPN表達(dá)式如下 # 1. 0 1 op0 2 op1 3 op2 ops order [0,1,2] # 2. 0 1 2 op0 op1 3 op2 ops order [1,0,2] # 3. 0 1 2 3 op0 op1 op2 ops order [2,0,1] # 4. 0 1 2 op0 3 op1 op2 ops order [1,2,0] # 5. 0 1 op0 2 3 op1 op2 ops order [0,2,1] # 注意這里每個(gè)模板的“運(yùn)算符順序”要和RPN計(jì)算時(shí)的出棧順序匹配 # 實(shí)際驗(yàn)證后用一組更嚴(yán)謹(jǐn)?shù)哪0?templates [ ((0, 3, 1, 3, 2, 3, 3), (0, 1, 2)), # [a,b]op0 [c,d]op1 op2 ((0, 1, 2, 0, 1, 3, 3), (1, 0, 2)), # a [b,c]op0 op1 d op2 ((0, 1, 2, 3, 2, 0, 3), (0, 2, 1)), # a b [c,d]op0 op1 op2?? ] # 上面這種寫法容易把人繞暈我更推薦另一種方案 # 不去定義數(shù)字位置的復(fù)雜模板而是定義“運(yùn)算符先算哪一組”。 # 下面用更直觀的方式直接枚舉5種“運(yùn)算合并順序”。 # 見(jiàn) full_solver 函數(shù)。 pass寫到這我意識(shí)到用“RPN序列模板”這種表達(dá)方式雖然計(jì)算快但對(duì)讀者不友好——太抽象容易出錯(cuò)。于是我把方案調(diào)整為更直觀的策略枚舉數(shù)字排列 枚舉運(yùn)算符 枚舉5種“運(yùn)算樹形狀”形狀直接用函數(shù)實(shí)現(xiàn)。下面這個(gè)版本是最終采用的求解器運(yùn)算樹形狀摸得著、看得懂from itertools import permutations, product from fractions import Fraction def apply_op(a, b, op): 應(yīng)用單個(gè)運(yùn)算符返回Fraction或None除零時(shí) if op : return a b if op -: return a - b if op *: return a * b if op /: if b 0: return None return a / b raise ValueError(f未知運(yùn)算符: {op}) def compute_all_shapes(nums, ops): nums: 4個(gè)Fraction ops: 3個(gè)運(yùn)算符 返回所有可能的結(jié)果列表最多5個(gè) a, b, c, d nums op1, op2, op3 ops results [] # 形狀1: ((a op1 b) op2 c) op3 d t1 apply_op(a, b, op1) if t1 is not None: t2 apply_op(t1, c, op2) if t2 is not None: t3 apply_op(t2, d, op3) if t3 is not None: results.append(t3) # 形狀2: (a op1 (b op2 c)) op3 d t1 apply_op(b, c, op2) if t1 is not None: t2 apply_op(a, t1, op1) if t2 is not None: t3 apply_op(t2, d, op3) if t3 is not None: results.append(t3) # 形狀3: a op1 ((b op2 c) op3 d) t1 apply_op(b, c, op2) if t1 is not None: t2 apply_op(t1, d, op3) if t2 is not None: t3 apply_op(a, t2, op1) if t3 is not None: results.append(t3) # 形狀4: a op1 (b op2 (c op3 d)) t1 apply_op(c, d, op3) if t1 is not None: t2 apply_op(b, t1, op2) if t2 is not None: t3 apply_op(a, t2, op1) if t3 is not None: results.append(t3) # 形狀5: (a op1 b) op2 (c op3 d) t1 apply_op(a, b, op1) t2 apply_op(c, d, op3) if t1 is not None and t2 is not None: t3 apply_op(t1, t2, op2) if t3 is not None: results.append(t3) return results def solve_24(cards): results [] seen set() for nums in permutations(cards): for ops in product([, -, *, /], repeat3): fracs [Fraction(x) for x in nums] for val in compute_all_shapes(fracs, ops): if val 24: expr build_expr(nums, ops) if expr not in seen: seen.add(expr) results.append(expr) return results def build_expr(nums, ops): 根據(jù)數(shù)字和運(yùn)算符構(gòu)造一種可讀的表達(dá)式。 注意這里只生成一種可行的表達(dá)式不保證和計(jì)算時(shí)的分步完全一致 但能保證數(shù)學(xué)上等價(jià)。為了精確展示我在更完整的版本里會(huì)記錄計(jì)算路徑。 # 簡(jiǎn)化版直接返回一個(gè)估算的表達(dá)式 a, b, c, d nums op1, op2, op3 ops # 默認(rèn)使用形狀1: ((a op1 b) op2 c) op3 d return f(({a} {op1} ) {op2} {c}) {op3} cpe4elpci5g if __name__ __main__: cards [8, 3, 8, 3] sols solve_24(cards) print(f共找到 {len(sols)} 個(gè)解) for s in sols: print(s)這份代碼的問(wèn)題在于build_expr不考慮具體是哪種形狀命中的導(dǎo)致輸出的表達(dá)式有時(shí)和實(shí)際計(jì)算路徑不一致。下面給出一個(gè)“記錄路徑”的改進(jìn)版可以精確輸出命中解對(duì)應(yīng)的表達(dá)式。3.5 記錄計(jì)算路徑輸出準(zhǔn)確表達(dá)式我在實(shí)戰(zhàn)中更傾向于讓計(jì)算函數(shù)同時(shí)返回結(jié)果和計(jì)算表達(dá)式而不是事后靠猜。做法是給apply_op增加一個(gè)字符串拼接的配套函數(shù)def apply_op_expr(a, b, op, expr_a, expr_b): 返回計(jì)算后的值以及對(duì)應(yīng)的表達(dá)式字符串 val apply_op(a, b, op) if val is None: return None, None return val, f({expr_a} {op} {expr_b})然后對(duì)每個(gè)形狀單獨(dú)寫一個(gè)函數(shù)比如形狀1def shape1(a, b, c, d, op1, op2, op3): va, ea apply_op_expr(a, b, op1, str(a), str(b)) if va is None: return None, None vb, eb apply_op_expr(va, c, op2, ea, str(c)) if vb is None: return None, None vc, ec apply_op_expr(vb, d, op3, eb, str(d)) if vc is None: return None, None return vc, ec每個(gè)形狀寫一個(gè)函數(shù)總共5個(gè)邏輯重復(fù)但清晰壞處是代碼長(zhǎng)好處是出錯(cuò)了很容易定位。我在正式實(shí)現(xiàn)時(shí)就是5個(gè)函數(shù)“復(fù)制粘貼改順序”反而比抽象模板好維護(hù)。完整版代碼放在個(gè)人倉(cāng)庫(kù)里這里展示形狀1和形狀5剩下3個(gè)同理def shape1(a, b, c, d, op1, op2, op3): ((a op1 b) op2 c) op3 d v1, e1 apply_op_expr(a, b, op1, f{a}, f) if v1 is None: return None, None v2, e2 apply_op_expr(v1, c, op2, e1, f{c}) if v2 is None: return None, None v3, e3 apply_op_expr(v2, d, op3, e2, fcpe4elpci5g) return (v3, e3) if v3 is not None else (None, None) def shape5(a, b, c, d, op1, op2, op3): (a op1 b) op2 (c op3 d) v1, e1 apply_op_expr(a, b, op1, f{a}, f) if v1 is None: return None, None v2, e2 apply_op_expr(c, d, op3, f{c}, fcpe4elpci5g) if v2 is None: return None, None v3, e3 apply_op_expr(v1, v2, op2, e1, e2) return (v3, e3) if v3 is not None else (None, None)最后匯總時(shí)遍歷數(shù)字排列、運(yùn)算符組合、5個(gè)形狀函數(shù)只要結(jié)果等于24直接記錄表達(dá)式字符串。這樣做表達(dá)式一定對(duì)應(yīng)真實(shí)計(jì)算路徑不會(huì)出現(xiàn)數(shù)學(xué)等價(jià)但結(jié)構(gòu)不對(duì)的表達(dá)式。4. 去重優(yōu)化與性能表現(xiàn)4.1 重復(fù)解的產(chǎn)生原因跑一次[8, 3, 8, 3]就會(huì)發(fā)現(xiàn)輸出結(jié)果里有大量“看似不同實(shí)則一樣”的表達(dá)式。比如((8 ÷ (3 - 8/3)))和(8 ÷ (3 - (8 ÷ 3)))本質(zhì)是同一個(gè)解只是括號(hào)寫法不同。(8 × (3 (3 - 8)))和((3 (3 - 8)) × 8)互為交換律數(shù)字順序不同但結(jié)構(gòu)完全等價(jià)。(8 ÷ (3 - 8/3))和(8 ÷ (3 - 2.666..))中后者的8/3會(huì)先算再到3里減屬于同一路徑不同寫法。如果目標(biāo)是“求解”重復(fù)解不影響功能如果目標(biāo)是“給出一份優(yōu)雅的解列表”就必須去重。去重策略可以從兩個(gè)層面做字符串層面去重對(duì)外層括號(hào)和多余括號(hào)做歸一化比如全角半角統(tǒng)一、去掉最外層括號(hào)。結(jié)構(gòu)層面去重記錄每個(gè)解的計(jì)算樹結(jié)構(gòu)將等價(jià)樹合并。這個(gè)實(shí)現(xiàn)較重適合大規(guī)模搜索。我在工具腳本里用的是輕量方案——把表達(dá)式字符串中的所有等號(hào)、空格去掉統(tǒng)一成緊湊形式再用集合去重。順手把((ab)c)和(a(bc))這類結(jié)合律導(dǎo)致的重復(fù)也合并掉因?yàn)檫@類重復(fù)在數(shù)學(xué)上完全等價(jià)用戶看多了會(huì)煩。4.2 耗時(shí)實(shí)測(cè)用[1, 2, 3, 4]測(cè)試完整枚舉7680種組合Python跑完大約需要純枚舉RPN計(jì)算約30毫秒。增加表達(dá)式字符串構(gòu)造約80毫秒。不去重直接打印解的數(shù)量大約在110條左右。對(duì)于一個(gè)簡(jiǎn)單腳本來(lái)說(shuō)完全夠用。就算你想一次性求解所有可能的4張牌組合13^4 28561種總耗時(shí)也在幾分鐘級(jí)別屬于可以接受的批量任務(wù)范圍。4.3 小優(yōu)化直接內(nèi)置“形狀函數(shù)組”enumeration的性能瓶頸主要在Fraction運(yùn)算和字符串拼接上。如果只是判斷“有沒(méi)有解”可以放棄字符串構(gòu)造只做數(shù)值計(jì)算同時(shí)把5個(gè)形狀函數(shù)合并成一個(gè)循環(huán)內(nèi)部的函數(shù)調(diào)用列表減少Python函數(shù)調(diào)用開銷。實(shí)測(cè)能把單局耗壓到10毫秒以內(nèi)但寫代碼的復(fù)雜度會(huì)上升。對(duì)學(xué)習(xí)用途來(lái)說(shuō)清晰優(yōu)先于極致性能。5. 常見(jiàn)問(wèn)題與排查實(shí)錄5.1 除數(shù)為零導(dǎo)致程序崩潰這個(gè)最容易踩。枚舉過(guò)程中會(huì)頻繁出現(xiàn)類似3 ÷ (4 - 4)這種除零情況。如果你直接寫a / b而不判斷b是否為0程序會(huì)拋出ZeroDivisionError。解決方案是在apply_op里顯式判斷如果除數(shù)為0直接返回None上層收到None就放棄這條分支。不要小看這一步——不做判斷的話看似偶爾觸發(fā)但枚舉量一大幾乎每局都會(huì)崩。5.2 浮點(diǎn)數(shù)判斷result 24永遠(yuǎn)為False如果用float計(jì)算并且用判斷會(huì)漏掉不少解。比如8 ÷ (3 - 8/3)浮點(diǎn)結(jié)果是23.999999999999996和24 比較返回False。我的解決方式是改用Fraction一次到位。如果你已經(jīng)寫好float版本也可以把等號(hào)判斷改成abs(result - 24) 1e-9但這屬于補(bǔ)丁式修復(fù)不如Fraction干凈。5.3 相同數(shù)字重復(fù)出現(xiàn)導(dǎo)致解重復(fù)輸出輸入[8, 3, 8, 3]時(shí)permutations會(huì)把兩張8互換的情況當(dāng)成不同排列于是同一個(gè)解出現(xiàn)多次。很多人在這一步誤以為自己的枚舉邏輯有問(wèn)題其實(shí)只是排列本身包含了重復(fù)元素。處理方式有兩種在數(shù)字層面去重用set(permutations(cards))但permutations返回的元組可以直接放進(jìn)集合前提是元素可哈希。在結(jié)果層面去重收集所有表達(dá)式字符串后用set()去重。我推薦兩者都做先數(shù)字去重減少計(jì)算量再表達(dá)式去重保證輸出干凈。5.4 表達(dá)式括號(hào)過(guò)多影響閱讀rpn_to_infix或形狀拼接法生成的表達(dá)式往往帶滿括號(hào)比如((8 ÷ (3 - (8 ÷ 3))))。閱讀還行但一旦輸出十幾條就有點(diǎn)累??梢宰鲆粋€(gè)括號(hào)清洗函數(shù)去掉最外層括號(hào)、對(duì)(ab)c這類“冗余括號(hào)”做檢測(cè)刪除。注意清洗時(shí)不能改變運(yùn)算優(yōu)先級(jí)所以要用一個(gè)簡(jiǎn)單表達(dá)式求值器驗(yàn)證清洗前后結(jié)果一致。我這里偷了個(gè)懶直接不去括號(hào)保持原樣避免清洗邏輯引入新bug。5.5 無(wú)解的情況怎么提示[1, 1, 1, 1]這種組合無(wú)解。代碼返回空列表即可。但排查時(shí)需要確認(rèn)到底是“真無(wú)解”還是“代碼有bug漏解”。我的自查方法是拿一組已知有解的輸入比如[1, 2, 3, 4]驗(yàn)證求解器能輸出解再拿“手算過(guò)確認(rèn)無(wú)解”的組合比如[1, 1, 1, 1]驗(yàn)證返回空。兩步都過(guò)了基本可以確認(rèn)枚舉邏輯沒(méi)問(wèn)題。6. 擴(kuò)展思路與后續(xù)優(yōu)化方向24點(diǎn)枚舉求解器雖然代碼簡(jiǎn)單但延伸出來(lái)的知識(shí)點(diǎn)不少。順著這個(gè)項(xiàng)目往下走可以做幾個(gè)有意思的擴(kuò)展擴(kuò)展一求解全部4張牌組合遍歷13^4種組合統(tǒng)計(jì)可解率。我試過(guò)跑全量結(jié)果可以畫成一張“難度分布圖”——有些數(shù)字組合有幾十個(gè)解有些只有一兩個(gè)解還有些完全無(wú)解。這個(gè)過(guò)程對(duì)理解“數(shù)字空間中的表達(dá)式覆蓋范圍”挺有幫助。擴(kuò)展二生成24點(diǎn)題目供游戲使用反向思考如果我想生成一個(gè)“保證有解的24點(diǎn)題目”可以先枚舉所有組合挑出語(yǔ)句結(jié)構(gòu)優(yōu)雅、解法數(shù)適中的組合比如1~5個(gè)解的作為題庫(kù)。輸出成cards - expr的映射文件存成JSON可以直接作為小游戲的后端數(shù)據(jù)。擴(kuò)展三多解匯總與解法排序?qū)γ總€(gè)有解組合按“解法的復(fù)雜度”排序比如優(yōu)先展示只用加減、或只用乘除的簡(jiǎn)潔解法把復(fù)雜的長(zhǎng)表達(dá)式排后面。這需要定義復(fù)雜度分?jǐn)?shù)最簡(jiǎn)單的做法是統(tǒng)計(jì)表達(dá)式中運(yùn)算符的種類數(shù)——種類越少越“優(yōu)雅”。擴(kuò)展四可視化表達(dá)式樹把每個(gè)解對(duì)應(yīng)的運(yùn)算樹畫出來(lái)配合matplotlib或graphviz可以讓用戶直觀看到哪兩個(gè)數(shù)先算、哪兩個(gè)再算。該擴(kuò)展對(duì)教學(xué)場(chǎng)景特別有用能幫助新手理解運(yùn)算順序和括號(hào)的作用。7. 寫代碼時(shí)踩過(guò)的兩個(gè)坑最后分享兩個(gè)實(shí)際操作中印象深刻的坑。第一個(gè)坑是減法順序。RPN求值里先彈棧的是右操作數(shù)很多初版代碼在apply_op直接寫成a - b但變量名指代不清。我曾經(jīng)在一個(gè)版本里把a(bǔ)、b搞反導(dǎo)致[1, 2, 3, 4]這種簡(jiǎn)單輸入都解不出來(lái)。排查方法很簡(jiǎn)單打印中間每一步的棧內(nèi)容和計(jì)算結(jié)果肉眼對(duì)照一遍就知道哪一步算反了。寫算法題不要怕用print調(diào)試小邏輯越復(fù)雜越需要即時(shí)反饋。第二個(gè)坑是“形狀函數(shù)漏寫”。五種子結(jié)構(gòu)對(duì)應(yīng)五種二叉樹形態(tài)但只要漏掉任何一種某些特殊組合就會(huì)漏解。比如[1, 5, 5, 5]的經(jīng)典解5 × (5 - 1 ÷ 5)依賴形狀4a op1 (b op2 (c op3 d))如果只實(shí)現(xiàn)了前三種形狀這個(gè)解就永遠(yuǎn)找不到。把5個(gè)形狀函數(shù)都寫好之后我建議跑一個(gè)“全組合自檢”——遍歷1到13的所有四元組確保每種組合都能找到解或有明確無(wú)解的結(jié)論防止形狀遺漏。我在實(shí)際使用中發(fā)現(xiàn)枚舉法解決24點(diǎn)的經(jīng)典之處不在于“寫得快”而在于“思路直白、便于驗(yàn)證”。沒(méi)有復(fù)雜的貪心策略沒(méi)有狀態(tài)轉(zhuǎn)移方程就是老老實(shí)實(shí)列所有可能、算所有結(jié)果。對(duì)于算法入門的同學(xué)來(lái)說(shuō)這個(gè)題目麻雀雖小五臟俱全有排列組合、有表達(dá)式解析、有精度處理、有去重邏輯是一道性價(jià)比極高的練手題。之后如果再做類似的窮舉類題目這套“枚舉維度劃分、中間結(jié)果緩存、路徑記錄”的套路可以反復(fù)套用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人妻色偷色噜| 九九这里只有精品| 亚洲综合另类欧美久久久| 韩日自拍| 黄色大片免费在线| 干b在线性社区| AV男人天堂网| 99超级碰免费视频| 免看60秒涩涩视频| 在线综合色| 亚洲天堂另类小说男人| 国内外内射高清视频| www色日本| 97这里只精品| 一级黄色牲爱A级片| 宅男91视频在线播放| 国产精品九九九| 亚欧高清v| 精品视频久久区| 天美传媒精品一区二区| 日韩一级二级| 翔田千里一区二区三区奶水| 亚洲精品色| 国产精品com| 色五月婷婷五月天| 五月亭亭六月丁香| 熟妇熟女一区二三区| 91精品国产91久久福利| 四虎永久在线精品免费网址 | 亚洲欧洲综合成人av一区| 久操操| 岛国免费视频在线| 欧美天堂亚洲电影院一区在线播放 | 小少妇| 美女91网| 亚熟在线| 绯色一区二区三区不卡少妇 | 国产操操日韩三级黄| 二对二中文字幕。| 欧美少妇性爱网站| 熟妇色99| 日日干夜夜欢| 大香蕉乱伦视频网| 精品久久无码午夜福利| 嫩草伊人久久精品| 亚洲古典另类欧美在线| 久久久新亚洲AV| 日韩激情啪啪| 私人尤物在线精品不卡| 亚洲污污网站| 天天爱天天韩国日本牛牛牛牛 | 久久久久九九九九九| 日日操丁香五月天| 91综合色噜噜| 欧美偷| 天堂麻豆天美| 被体育老师抱着c到高潮| 欧美BT 亚洲色图| 色婷婷成人综合| 人妻中文字幕日韩电影| juliaann欧美丝袜办公室| 亚洲情色1区| 亚洲成人福利电影免费| 性夜影院爽黄A爽免费动漫| 最新av在线| 日韩AV熟女乱伦| 亚洲中文字幕在线视频一区二区 | 99久久综合| 校园春色五月天| 久久久婷| 999在线电影香蕉| 色哟哟511老熟女| 久久久久九九九九| 91狠狠狠| 97精品视频网站| 成人午夜无码视频| 操逼国产免费| 亚洲欧美高清无码| 亚洲欧美97√| 欧美人妻中出| caopeng97人妻| 免费看A片毛毛片在线播| 天美传媒AV在线| 欧美激情久久久久| 97激情97激情| 久久人妻办公室视频| 91成人久久| 天天噜| 欧美色交| 久久后入制服| 成人天天看站长推荐| 天天操av懂色| 九九色逼| 色情综合| Blackedraw视频一区二区| 国产美女在线精品免费看| com 首页 18岁 禁区 女优 免费 精选 同城 | 校园春色AV天堂| 天美传媒av在线| 91 丝袜在线| 欧美制服网站美腿丝袜| 不卡超碰护士AV在线免费播放| 亚洲图片欧洲图片aⅴ| 精品国产无码中文| 精品亚洲国产成人av网站| 欧美人黑A片无码免视费| 亚洲天堂一二| 国产又粗又长又大的视频| 人妻少妇久久| 国产91丝袜 在线播放| 老鸭窝在线视频播放| 制服诱惑亚洲一区二区三区在线观看| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 亚洲清纯唯美| 欧美亚洲韩国视频十五区 | 在线女人91| 91综合色| 97色色视频| 人妻日日干| 操逼网站视频漫画国产| 欧美在线干| 伊香蕉综合久久久久久久噜噜噜| 亚洲资源站| 日韩9区| 抽插亚洲无码| 操国产高清| 97综合网| 亚洲国产成人福利在线观看| 久久社区一区二区三区| 人人操AV| 国产久久久9999| 97在线精品| 日韩精品.久久精品.AV女优.天美传媒| 丁香六月婷婷久久综合| 91国产精品熟女| 91丝袜在线观看视频在线观看| aaa淫乱视频| 曰本91情色| 风间由美日韩欧美久久| 91性情| AA级电影三区| 超碰97人人乐| 老熟女综合| 国产强奸超碰AV| 一区二区亚州激情久婷婷欧美| 日韩BBN| 不卡日本一区二区| 国产精品久久aV| 中文字幕精品一区二区精| 亚洲性爱无码乱伦av| www.婷婷五月天| 人人爱夜夜爱| 91亚洲欧美激情| 国产日韩精品suv| 91在线视频国产网站| 国产精品视频麻豆入口| AV 少妇 人妻 偷拍| 久久一二三四五六七八九区区| 97精品在线| 亚洲AV无码乱码| 粉嫩av久久一区二区三区| 91狠狠综合久久久| 久久爽爽精品| 91美女视频在线观看| 亚洲第一狼人丝袜美女另类 | 无码高清专| 六六久久日韩不卡| 久久久久久久久久精| 超碰4A| 干我久操| 亚洲超碰在线| 国产吹潮女在线观看| 综合久久少妇中文字幕| 久久欧美按摩999| 97天天在线| 日本性感人妻91| 欧美色综合影院| 久久人爽| 在线一道啪| 人人插人人摸人人| 青青草色插素人| 午夜毛片亚洲精品片国产久久久| 狠狠干综合| 天天拍天| 国产黄色av大片网站| 人妻夜夜爽天天爽麻豆三区网站 | 日韩在线视频1234| 九九精品美女高溯喷水| 久久久精品网站| 成人av动漫在线观看| 欧美国产成人在线| av网站国产主播在线| 任你艹| 亚洲区限制级| 国产精品美女久久久久久网站| 五月色综合| 吉川爱美亚洲二区在线 | 日韩情色AV| a片 xxxx受爽视频| 中文字幕一区av| 精品一区二区三区18| 黄色毛片A片| 日韩色女精品| 国产精品久久伊人| 蜜臀va69| 五月香婷婷| 激情视频图片| 天天弄天天操| 久久午夜色播影院免费高清| 大香蕉520| 91日韩网站| 天天操天天射天天日| 国产视频三区四区| 亚洲国产av中文字幕久久| 操逼视频亚洲| 啊啊啊啊,啊啊好多水| 欧美激情中文字幕另类小说| 热热色青青草| 日本日皮视频逼| 中文字幕欧美日本乱码一线二线| 日韩 欧美 视频 在线 一区| 国产强奸乱伦xd| 欧美日韩国产电影| a在线视频免费观看| 国产高清无码一区二区三区四区皇冠| 久久久999网站| 男人天堂网址| 九九九久久久久| 国产成人无码啪| 五月天欧美色图| 不卡免费av在线播放| 大香蕉性欧美| 久久婷婷一区二| 影音先锋日本乱伦| 亚洲999综合| av资源在线播放天堂| 九九热三级片| 91色综合激情| 91精品丝袜在线观看| 欧美激情在线观看视频| 91在线免费观看处女| 天天躁日日躁AAAAXXXX国产| 亚洲97资源| 丁香五月天激情综合| 欧美在线91| 精品国产99| 狠狠色色| 亚洲αv一区二区三区| 一区二区视频在看| 看黑丝美女操逼青青网站| 久草线上视频免费看| 日本精品网站在线中文| 人人操人人摸人人看人人干| 97高清啪啪| 中文一区二区三区影院| 欧美 亚洲 大香| 久久9999 | 国产A v无码专区| 校园春色美腿丝袜 | 欧美少妇一区二区三区| 天天操天天干一区二区 | 91真人天天在线| 9+1视频网址| 精品国产无码中文| 男人久久天堂| 久久亚洲天堂| 色诱avtt| 性欧美另类高清| 亚洲成人性爱网站在线播放| 91 丝袜在线播放| 久久伊人东京热| 欧美亚洲日韩16色| 99日视频在线免费| juliaann丝袜大战黑鬼| 69人妻精品一区二区绯色| 欧美一区二区三区入口| 国产精品视频内谢女人| 国产日产欧产美韩系列麻豆免费| 日韩精品人妻中文字幕久久久| A一级色女| 亚洲图片视频小说| 人人操人人射人人干| 色女女女导航| 9久热| 黄色片,com| 亚洲人妻精品一区二区| 蜜桃AV天堂| 日韩人妻无码精品系列| 中文一区二区婷婷视频| 丁香五月av| 天天视频综合在线观看视频| 国产亚洲日韩欧| 欧美激色| 超碰 国产熟女精品一区| 啪啪啪大香蕉| 99re国产中文字幕| 婷婷五月天成人网| 久久怡红院| 亚洲一本大道中文字幕无码在线| 99色热国产视频精品| 中文AV制服乱伦| 久久久久久999| 日韩欧美~中文字| 日韩亚洲97| 啊啊啊啊啊啊啊在线| 操b网站亚洲无码| 99国产在线绯色一区| 亚洲黑丝在线| 91人妻超碰| 精品一区96| 天天色悠悠激情| 久久久草成人网站久久久草成人久久久草久久久 | 免费a级毛片av无码久久精品中文字幕| 草草草草视频| 91肉丝| 欧美91在线| 9118禁| 性一级黄色录像片网站导航| 九九热AV| 日本性爱网址| 91久操| 午夜精品久久久久久久男人的天堂 | 久久九色| 色爱三区| 五月天婷婷成人网| 超碰97欧美在线| 2023天天操夜夜操| 丁香婷婷久久| 少妇久久久| 蜜臀99999| 五十路二区在线| 日韩欧美蜜桃精品久久中文字幕久久| 久久精品无码熟妇一区二区三区视频导航| 亚州欧美一区| 久久综合久久综合人久久夜精品| A片三级无码| 911粉嫩人妻| 婷色五月天| 国产成人资源| 青青欧洲黑| 日韩中文字幕精品一二三事国产精品| 精品国产乱码久久久| 天天色欧美| se01国产在线视频| 香蕉在线一区二区三区| 精品9区| 女人18精品一区二区三区| 黄色二级片网站| 久久久久久久六六| 欧美日韩不卡传媒| 欧美性爱精品七区| 3p国产欧美99热| 亚洲女毛多水多21P| 98色网| 91超碰碰在线| 久艹日日日| 九月丁香婷婷色| 久久久久国产精品片区无码直播| 日本不卡码黄色| 黄色一区三区| 波多野42部激情无码喷潮| 亚洲第一黄色av网站| 麻豆AV一区二区| 天天日天天操心| 九七超碰| 成人a大片在线观看| 日本色色网| 日本999精品| 欧美日韩人妻精品系列一区二区三区| 日韩字幕一区| 激情综合五月| 97天天插| 国产精品黄色三级av| 91劲爆| 97在线看| 日逼视频日本| 久久综合女优| 欧美性爱一区二区三区| 免费在线观看国内色片网站网址| 国产精品亚洲四五区在线观看| 色香欲综合| 黄片www.| 日韩少妇在线视频| 国产强奸乱伦xd| 国产精品一区二区在钱播放| 男女无套 免费网站| 女人被添高潮免费视频| 草久久久| 日韩无码三级影院| 欧美在线伊人色| 男人天堂网址| 日本美女性生活久久久久久久| 欧美肥臀在线| av在线不卡一区二区三区| 九九在线精品| 99re9| 国产精品三级视频网站| 激情婷婷五月天| 久久激情四射婷婷丁香五月天| 欧美激情综合| 超碰国产情侣自拍网| 91丝袜在线观看| 91美女在线精品视频| 久久久久久九| 一区二区 韩日AV| 色图四区| 精品成人av一区二区三区在线| 亚洲se电影| 强奸乱伦av电影| 懂色av中文字幕一区二区三区天美| 18禁免费视频| 欧美综合777| 国产午夜无码片在线观看影视| 亚洲成人色情五月天丁香花| 亚洲成人一区二区精品| 清纯唯美综合亚洲| 又黄又爽在线观看视频| 日韩无码人妻| 校园春色综合色| 91久久久亚洲| 另类av综合久久| 亚洲欧美国产中文视频| 91爱看| 逼逼逼逼操操操操操操操操操午夜剧场| 极品后入免费视频| 婷婷av在线中文字幕| 欧美亚洲美少妇一区二区| 国产操伦| 亚洲色图日韩丝袜制服一区二区五月在线| 九九色精品| 超碰免费97| 美女主播色欲91抠b在线播放| 免费αⅴ在线观看| 自拍第一页| 少妇 综合| 国产精品熟女九色九色蜜臀| 玖玖无码超碰| 精品人妻一区二区三区-国产精品| 美国黄片aaa| 中文欧丝袜诱惑| 色情五月婷婷| 超碰社区97| 又黑又大又粗| 欧美性爱中文字幕无线码| 5252色欧美在线男人的天堂| 久久激情五月| 黄色网址在线免费观看| 酒色综合网| 香港日本韩国人妇99www.wccm20| 国产少妇肉丝在线观看| 中文字幕十五区| 国产AV色黄看到爽| 欧美天堂在线| 欧洲精品一二三在线| 五月婷在线| 亚洲熟女乱色一区二区三区| 揉揉揉夜夜| 中文字幕97色| 天天操夜夜操| 日韩AC| 国产亚洲色停停久久99精品91| 亚洲在钱| 久久超碰免费的| 大香蕉丝袜一级片| 亚川综合视频| 国产区日韩区在线观看| 97国产精选| 国产污视频麻豆传媒一区二区 | 一区二区偷拍拍视频| 啪啪啪东京| 大奶的诱惑| 超碰天天去日穴| 人妻少妇色综合| 97国产色综合| 五月丁香啪啪网| 免费精品人妻一区二区三| 亚洲在线| 成人资源中文字幕在线观看| 日韩精品系列| 欧美,亚洲,日韩,v,天堂,手机在线观看| 91总综合网| sss视频华人在线| 一本大道不卡一二三区| 天天夜夜rb| 欧美亚洲韩国视频十五区| 国产综合操逼高清| 我爱操| 久久9久久| 91国产美女丝袜足交精品视频| 一区二区三区男人的天堂| 久久超碰日韩精品| 经典丝袜一区| 青青三级视频| 91黑丝美女| 99re69| 久久伊人东京热| 日韩女优在线| 日韩精品在线观看网站| 一区二区三区黄片免费观看| 黄色人人| 高清国产成人无码| 日韩在线观看字幕精品| 能在线播放的国产三级| 国产精品女久久久久av爽| 都市久久精品激情亚洲| 亚洲一区二区三区不卡国产欧美| 91av一区二区在线观看| 中国女人内射6XXXXX| 国产白丝网站| 久操国产在线| 色悠久| 私人尤物在线精品不卡| 亚洲天堂在线怕怕视频 | 久久久中文| 图色综合网| 区二区亚洲婷| 色五月AV在线| 亚洲成人AB| 精品免费囯产一区二区三区| 欧美少妇人妻| 性爱综合一区二区| 亚洲精品aa久久伊人| 操逼www.| 久热99| 综合网亚洲在线| 国产精品探花色| 欧美激情性爱视频网站| 殴美在线AⅤ| 婷婷亚洲五月***久久| 日韩人妻无码专区| 97视频网站在线观看| 在线综合 亚洲 欧美中文字幕 | 欧美日本不卡在线| 中国国国产一级特黄毛片| 黄色视频60分钟| 亚洲欧美日韩精品久| 看日韩美女二区三区免费操逼视频| 超碰人人妻| surenchaopeng| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 亚洲无码 国产无码| 4399成人黄A片| 日韩午夜国产| 精品无码久久久久久久久果冻糖心| 黄色网址在线免费观看| 404操逼福利视频| 亚洲男人的天堂一区二区| 欧美AB在线| 亚洲成人久久美女| 亚洲日韩资源| 色情综合| 亚洲情色一区综合| 日韩电影在线观看网址| se吧提供91精品国产91久久久久久| 91校园春色长篇| 99re这里只有精品2| 嫩草黄页| 午夜120视频在线观看| 色婷婷亚洲婷婷| 韩国毛片一区二区三区| 干干干天天| 在线播放中文字幕| 五月丁香婷婷色| 久久尹人大香焦视| 啊啊啊啊啊好大好舒服想要| 日韩簧片免费看| 欧美曰韩国产精品| AV乱伦专区| 男人的天堂在线2| 另类TS人妖一区二区三区| 天天综和| 久久久亚洲高清不打码| 97资源站久久| 亚洲av在线免费观看| 97超碰色| 99在线啪| 日韩偷拍色图| AV一区观看| 久久久久久久久9| 三级网站超变态精品| AAAAAAAAA黄片| 久久综合资源一区二区| 深夜激情| 国产精品久久久久久久久久久久久久久久 | 国产精品香蕉| 色约约一区=区三区| 国产一区96在线| 国产日韩欧美亚洲精品95| 国产呦精品系列在线观看| 欧美综合 站| 国产无马av| 日逼视频日本| 国产欧美美女免费观看视频| 日韩乱中文| 日本人妻最新在线中| 91成人久久| 激情四射熟女丝袜| 啊啊啊啊啊啊啊啊啊啊在线观看| 久热免费视频| 思思热er精品视频| 性爱视频免费网址| 狠狠操,使劲操| 天天综合97| 国产美女91| 免费成人在线熟妇网| 亚洲妇色| 国产欧美日韩臀| 99自拍B亚洲 | 天天综合网~91| 国产91丝袜 在线播放| 无码人妻精品一区二区三区九九| 精品国产一区二区三区久久久蜜臀 | 噜噜噜亚洲精品| 麻豆一区在线| blacked精品一区国产| 日韩高清黄片| 92性色国产午夜福利在线661| 白嫩嫩一区| 成年女人18级毛片毛片免费观看| 国产精品爽爽va在线观看98| 综合欧美日韩在线观看| 五月丁香久久| 免费的av网| 啊啊啊好舒服好爽啊啊啊视频| 国产天天骚| 欧美 熟女 日韩| 麻豆区久久久久亚| 欧美成人贴图| 乱伦熟女论坛| 激情五月天色色| 久久发布国产伦子伦精品| 久久久久婷婷| 国产剧情一区在线观看| 色九九九综合| 一区二区三区四区五区久久久久久| 97干在线视频| 97天天| 天天澡天天爽日日AV| 日韩欧美俄罗斯A片| 欧美另类精品xxxx| 伊人AAA| 久久9久9久99久9久9| 久9久9精品| 欧美v亚洲v综合v国产v妖精| 国内自拍 日韩激情 99| 天天弄欧美| 欧洲自拍第一页| 97免费在线观看| 久久欧美性爱视频| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 白丝一区| 99热这里只有精品8| 婷婷色一区| 久久精品成人| 日韩性爱再线视频| 操91| 国产真实野战在线视频| 久久99精品国产| 日本视频在线中文字幕| 极品极品色影院| 亚州色站 日韩电影| 亚洲无码com| 五月婷婷爱六月丁香色| 插入粉嫩少妇视频| 亚欧视频在线| 搞中出视频在线观看| 蜜臀久久99精品久久久久久-DVD | 五月天激情婷婷| 久久久精精精| 久久婷婷五月天| 欧美激情高清性猛交| 97五月天| 中文字幕精品探花视频| 蜜桃色色网站视频三区| 91综合色| 美女AV一区二区| 国产精品久久99日日| 97超碰超欧美。| 国产精品亚洲免费| 激情文学88| AV男人天堂网| 欧美后进式| 人妻一区二区三区视频 | 可以免费观看的AV| 亚洲有码视频二区| 亚洲欧美精品一区天堂久久 | 国产亚洲日本精品在线| 四虎影视永久在线观看精品免费网站 | 老熟女乱子伦中文字幕一区二区| 破处bbq| 啊啊啊在线观看免费视频| 亚洲黄网在哪免费看| 中文字幕免费在线观看| 黄污污污污| 第四色奇米影视777| 欧美第二页午夜| 国产熟女一区二区丰满| A级片一区| 欧美日韩妖精91com| 久草婷婷| 天天影视网综合少妇| 免费精品中文字幕| 欧美gv在线观看| 九九九九九九视频| 黄色高清久久无码依人| 亚洲情色婷婷五月天| 五月丁香色情| 亚洲国产无码精品首页久久久| 婷婷久月| 99中文字幕| 天天干人妻视频| 天天操天天7| 欧美亚洲涩涩| 高潮内射在线| 精品射1999| 丰满人妻一区二区三区在线| 密乳无码| 欧美呦呦性爱| 天天视频网站黄| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 中文字幕精品日韩中文字幕| 小日子操bb在线看| 日本黄色精品专区网站| 99久久精品欧美国产| 黄片免费日韩| 操www| 精品综合久久久久久五月天| 欧美色综合图片| 另类图片五月天| 欧美亚洲丝袜美女电影| 色老牛| 欧美色图97| a人片中文字幕一区二区| 日本精品加勒比海一区| 欧美 色 亚洲| 欧美在线天堂| 日韩在线性爱免费视频| 亚洲欧洲av影音| 天天摸夜夜添无码小视频| 最近2018中文字幕在线高清第一页| 欧美精品成人一区二区在线观看| 精品无码久久久久久国产浪潮| 国产不卡免费在线视频| 欧美综合站| 婷婷伊人| 日本欧美色| 亚洲天天操| 青青青青青手机视频| 性暴力欧美猛交在线直播| 黄页大片在线观看| 女人爽到高潮久久久| 免费超碰97久久| 亚洲精品97| 综合久久久久久久久91| 欧美激情中文字幕另类小说| 欧美强奸乱能| 99这里有精品| 亚洲情色 欧美| 三级片网站在线播放| 国产第11页| av网站在线观看了| 5252色欧美在线| 天天伊人| 好吊妞转入那个网| 嗯嗯不要 视频| www.伪伪| 黄总AV色图| 99精品欧美一区二区三区桃色| 国产精品青青草| 熟女乱3伦999| 少妇滛荡视频| 欧美性爱一区二区三区| 激情视频网址| 日本一线产区和二线产区伦理片| 国产亚洲美日韩Aⅴ中文字幕无码成人| 加勒比无码一区二区三区| 91爱看| 免费伦费视频在线观看| 亚洲日韩黑丝| 老熟女区| 欧美一级久久久丰满| 亚洲国产青青| 国产精品一区二区校花| 东京热一区二区三区四区五区六区| 欧美人妖内射| 另类视频在线| 亚洲色图欧美一区二区不卡| 九月丁香综合网| 99久久免费看精品国产一区| 欧美美女自慰一区二区三区| 熟妇的味道HD中文字幕| 欧中美三级一区二区三区| 日本精品人妻少妇一区二区| 99超级碰免费视频| 亚洲鸥美色图| 狠狠干狠狠干| 26uuu偷拍亚洲欧洲综合| 骚妻少妇精品性色无码四色A V| 人人操人人舒服| 国产尤物在线三区| 99青草| 欧美国产精品| 视频一区二区免费在线| 欧美综合综合| 欧美 中文字幕 一区| 探花激情视频| 操比国产| 日韩欧美国产高清视频| 正在播放国产精品一区| 影音资源男人日韩| 一直超碰| 国产性刺激| 久久综合日韩亚洲欧美| 亚洲综合在线视频| 日本性爱不卡视频| 青娱乐国产精品| 国产精品 久久久精品一牛| 玖草在线视频| 99re这里只有精品9| 欲香欲色综合天天伊人| 欧美综合中文| 久久精品高清无码一区| 久久久久久久久久久久黄色| 97人肏| 久久99视频| 欧美一区二区观看在线| 日本丝袜人妻内射| 天天射夜夜操| 久久成年片色大黄全免费网站| 大香蕉性欧美| 欧美色图91p| 少妇三p| 综合久久少妇中文字幕| 久久精品一区一起草| 天天天干977| 日韩97视频| 国产乱弄免费在线视频。| 看看小穴| 伊人久久大香蕉线AV五月天| 久久一区,青青青青草视频在线播放| 丝袜天堂| 午夜九九| 97免费在线| 国产精品嫩草影院午夜两性| 天天躁日日躁狠狠躁| 日韩欧美成人午夜福利| 蜜乳AV一区二区三区四| 狂操嫩妻视频一区二区三区| 国产超碰在线一区| 亚洲日韩东京热一区| 后入人妻无码| 人人操我人人干| 久久人人爽人人爽人人片Ⅴ| 欧美精品在线观看| 色踪合AV| 日韩性爱小视频| 国产亚洲日韩欧| 亚州精品一区二区三区香中文字幕在线| 麻豆国产尤物AV| 91伊人久久在线| 免费岛国一级片| 五月天激情网图片| 内射中出日韩在线观看视频| 久久99干一本高清| 一区二区精品日韩欧美在线观看| 国产三级日产三级韩国三级| 青娱乐av在线| 亚洲乱码精品一区二区| a天堂视频| 五十路熟女工口 | 日韩Va亚洲va欧美Ⅴa久久| 国产67194| 日韩av熟女一区二区三区成人| 不卡六六在线91| 在线免费观看高清无码视频| 久久99网站| 亚洲无码超碰免费| 亚洲91网站| 欧美亚洲| 日产操逼| 亚洲黄色电影| 丝袜六区| 91老司机在线视频免费观看| 五月天加勒比啪| 国产中出内射一区二区| 蜜桃视频精品一区二区| 国产精品久久久| 蜜臀久久99精品久久久久免费观| 天天做天天爱| 97人人草| 免费视频在线一区二区不卡| 婷婷五月天久久精品视频一区二区三区| 人妻在线大香蕉| 欧美成人性爱视频免费观看| 欧美日韩婷婷中文| 超碰调教97| 天天激情综合站| 日韩9999| 超碰成人国产| 五月丁香激情四射| 亚洲色香| 99久久99九九99九九九| 久久国产成人精品国产成人亚洲| 99热精品青草在线| Blackedraw视频一区二区| 97在线免费视频观看| 求求你操操我| 五月天大香蕉| 91欧美在线| 97精品国产手机| av在线观看不卡网站| 亚洲黄色电影| 日韩精品大香蕉伊人在线| 五月丁香成人网| 秋霞怕怕片| 欧美熟女丝袜| 狠狠狠一区二区三区| yaouchengrenav| 男同专区一区二区三区在线| 久热伊人99re| 又大又白奶子| 亚洲av强奸乱伦| 日本色色色色色视频| 久久黄片国产一区二区| www.人人摸在线视频| 老汉网| 色五月婷婷色| 中日韩免费看男女操逼大全| 福利五区| 欧亚乱色熟一区二区三四区| 91狠狠综合久久久| 伊人久久艹| 亚洲成人日韩小说| 91东京热男人的天堂| 欧亚揄拍偷拍精品视频 | 欧美婷婷| 长长久久曰曰夜夜成人网| 操逼逼无码| 国产一级特黄大片处女| 亚洲一区二区三区中文字幕| 欧美一区二区三区四区综合| 人人操人人肉久久精品| 大学生美女口爆| 久久久久免费看少妇A片特黄| 一起草欧美| 日韩字幕一区| 久久亚洲AV无码专区首页| 91无遮挡| 在线综合色| 精品少妇一区二区三区在线视频| 性爱1区| 国产视频一区二区在线观看| www.一本大99| 色妇综合网| 夜夜躁狠狠躁日日躁av| 婷婷九月丁香| 偷拍片久久| 亚洲色图综合| 波多野结衣之双飞调教在线播放 | 亚州免费啪啪视频| 淫荡熟女乱伦网| 欧亚免费视频| 毛片17S| 二级毛片| 久久只有精品| av片在线观看免费播放| 亚洲砖码砖专无区2023| 亚洲欧美日韩夜夜| 性色高清在线| 欧美色蜜桃97| 一区二区视频在线播放| 色久综合| 午夜操操操| 黄片免费看的| 人妻天天爽夜夜爽精品2| 伊人久久大香蕉线AV五月天| 男人的天堂一区| 96精品久久久久久久久久| 操我无码| 欧美在线官网| 久操免费观看| av九九| 日韩传媒在线| 无码二级三级| 午夜久久无码1000合集| 亚洲午夜福利视频| rivers-china.com| 强免费黄色网址| 后入综合久久| 九色精品视频导航1| 熟女天天干| 综合伊人激情| 欧美在线l亚洲| 中文字幕第2页| 激激五月| 国产精品欧美激在线| 天堂69亚洲精品中文字| 91撸色网 玖玖网 欧美| 丝袜AV一区二区三区| 青青草密桃在线播放| 成人精品久久久午夜福利| 久久大精品乱码视频人妻熟女| 成人乱人伦一区二区| 国产地址二三| 大香蕉伊利av| 人人看人人插| 91男人综合| 熟女精品va中文字幕| 少妇高潮一区二区三区在线| 婷婷情色综合网| 蜜臀久久99精品久久久电影| 鲁鲁色综合网| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲日本大香蕉1| 天天淫人人妻日日色| 先锋影音av先锋一区| 国产精品97超碰| 操美女人妻| 亚洲色五月| 激情无码日韩| 久久久精品网站| 国产97在线播放| 五月综合视频| 国产精品久久久久中文字幕| 女上位精品在线| 成人片在线播放| 日本性感人妻91| 中文字幕一区二区三区四五区| 丝袜av一区二区三区| 混色激情av| 91精品伊人久久久大香线蕉91| 97人人操人人摸| 秋霞怕怕片| 熟妇色99| 97亚洲综合在线| 午夜无码熟妇丰满人妻| 国产人妻天天干精品| 乱伦日本色图AⅤ| 一起草三级AV电影在线观看| 人妻久久| 日韩91网| 少妇的嫩逼图片| 5252色欧美在线男人的天堂| 97人亚洲综合字幕| 91精品人妻一区二区三区蜜桃臀 | 日产欧美电影一区二区三区| 青青草色AV| 97精品| 桃花色综合影院| av在线不卡一区二区三区| 久久精品久久久久久久| 一本大道久| 91麻豆天美国产欧美高潮| 欧美日韩人妻婷婷一区| 亚洲乱色视频一区、二区在线| 志村玲子视频一区二区| 亚洲欧洲偷拍一区| 殴美日韩m| 久久综合乱子伦国产免费| 极品内射| 99国产精品免费| 精品97久久综合| 呦女网站| 亚洲青色欧美| 香港久久久| 人人性爱视频免费| 色五月综合网| 高树玛利亚无码流出| 熟妇熟女视频一区二区三区| 日韩性爱高清免费视频| 久久久97| 人妻熟女一区二区三区视频| 中文字幕乱碼在线| 亚州,欧美在线| 日本一区二区亚洲综合| 韩国三级一线观看久| 久久国产乱子伦精品免费女,网站| 97香蕉网| 思思性爱| 国产第25页在线观看| 久久人人爽爽爽人久久久| 熟女人妻久久中文字幕一二区| 热久久国产精品视频大陆精品| 日本三级韩国三级美三级91| 一区二区不卡| aaa亚无码专区| 日本美女性生活久久久久久久| 国产精品3| 老熟女乱子伦中文字幕一区二区| 色99视频| 久久成人东京热人妻| 国产自制av蜜乳| 成人精品视频| 91精品人| 精精夜夜| 美国三级日本三级久久99| 国产精品亚洲无码| 久久嫩草国产成人一区| 深夜福利黄片| 久久久久成人亚洲国产| 插入粉嫩少妇视频| 午夜理论片在线观看免费| 日本精品人妻少妇一区二区| 丰满人妻-区二区三区免费看| 人人扣人人操| 欧美加勒比| 青青草日逼视频| 日韩免费中文字幕视频| 成人影 天天操 亚洲| 欧美91网| 图色综合网| 天天色黄色影院天天操| 国产不卡精品91| 欧美性生活免费网| 热G综合热G中文| av午夜影院在线播放| 欧美伊人电影| 国产原创精品| 玖玖爱在线视频免费观看| 在线不卡视频| 精品久久久久久AV无码| 国产蜜臀在线| 亚洲三区视频| 亚洲熟女综合一区二区| 欧美一区二区日韩传媒搭讪精品| 少妇高潮九九九九| 91男同| 色婷婷久久| 园内精品自拍视频在线播放| 好舒服视频| 日本亚洲vr欧美不卡高清专区| 国产无马视频| 天天综合网网欲色| 91天射| 青青草字幕AV| 91色综| 无遮挡猛进视频免费无限观看 | 国产欧美日韩女同性恋ww喷水精品| 西西美女视频网| 欧美日韩国产中文精品字幕自在自线,| 中文字幕精品一区二区精| 在线观看午夜婷婷久久久久清性观看| 黄色电影在线播放综合网站| 婷婷五月天激情四射| 天堂亚洲精品| 97一区二压| 伊人成人中文字幕久久网| 国产精品无码av| 不卡一区二区日本视频| 午夜久久无码1000合集| 2017大香蕉| 啪啪啪综合网| 69精品| 搡老女人老91妇女老熟女| 色97干| 国产成人啪一区二区| 91美女在线看| 可以免费观看的AV| 熟妇在线视频一区二区|