国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

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

用Python枚舉法求解24點(diǎn)游戲:排列組合與表達(dá)式求值的完整實(shí)現(xiàn) 最近跟朋友聊起算法題無意間聊到24點(diǎn)游戲順手用Python寫了個(gè)枚舉法求解器。這個(gè)題目看起來簡單——給4張牌用加減乘除湊出24但真正落地成代碼時(shí)涉及排列組合、表達(dá)式構(gòu)造、求值精度這些細(xì)節(jié)踩了一圈坑之后倒是個(gè)不錯(cuò)的算法練手項(xiàng)目。這篇文章就用枚舉法一步步拆解24點(diǎn)問題的求解過程分享一份可直接運(yùn)行的Python實(shí)現(xiàn)代碼以及我自己調(diào)試時(shí)踩過的幾個(gè)坑。1. 24點(diǎn)問題的本質(zhì)與枚舉法選型1.1 題目定義與問題拆解24點(diǎn)游戲的核心規(guī)則很簡單從一副撲克牌中隨機(jī)抽取4張牌每張牌的點(diǎn)數(shù)在1到13之間J/Q/K分別對應(yīng)11/12/13允許使用加、減、乘、除四種運(yùn)算以及括號要求4張牌全部且僅使用一次最終計(jì)算結(jié)果等于24。很多人小時(shí)候玩過這個(gè)游戲但用程序解決時(shí)需要把“手算”的思路翻譯成計(jì)算機(jī)能執(zhí)行的邏輯。我先把這個(gè)問題的本質(zhì)拆開來看數(shù)字層面4張牌每張牌必須且只能使用一次。運(yùn)算層面3個(gè)運(yùn)算符每個(gè)運(yùn)算符從加減乘除中任選其一允許重復(fù)。結(jié)構(gòu)層面3個(gè)運(yùn)算符決定表達(dá)式的結(jié)構(gòu)但括號的存在讓結(jié)構(gòu)變得復(fù)雜比如(ab)×(cd)和ab×cd是兩種完全不同的表達(dá)式結(jié)構(gòu)。枚舉法的核心思路就是“窮舉所有可能性”——把所有可能的數(shù)字排列方式、運(yùn)算符組合方式、括號結(jié)構(gòu)方式全部列出來逐一計(jì)算看哪個(gè)組合的結(jié)果等于24。這個(gè)思路直白但關(guān)鍵在于搜索空間到底有多大、怎么組織枚舉順序才不重不漏。1.2 為什么枚舉法足夠解決這類問題先說結(jié)論24點(diǎn)的搜索空間非常小用枚舉法完全可行而且代碼寫起來比動(dòng)態(tài)規(guī)劃、回溯搜索要直白得多。計(jì)算一下搜索空間的大小4張牌的全排列4! 24種。3個(gè)運(yùn)算符的排列4^3 64種每個(gè)位置有加減乘除四種選擇允許重復(fù)。括號結(jié)構(gòu)如果直接枚舉括號需要區(qū)分5種基本結(jié)構(gòu)后面會詳細(xì)說。三者相乘24 × 64 × 5 7680種情況。哪怕是Python這種解釋型語言在一秒內(nèi)跑完7680次四則運(yùn)算也毫無壓力實(shí)際計(jì)算耗時(shí)基本在幾十毫秒級別。這個(gè)規(guī)模意味著我們不需要什么高深的剪枝優(yōu)化老老實(shí)實(shí)把每種可能都算一遍就是最穩(wěn)妥的方案。當(dāng)然如果想要更高性能可以事先把所有可能的表達(dá)式樹結(jié)構(gòu)固化下來避免運(yùn)行時(shí)重復(fù)構(gòu)造也可以先用奇偶性、整除性做簡單剪枝。但對于學(xué)習(xí)算法、或者只是做個(gè)工具腳本來說這些優(yōu)化不是必須的。枚舉法的價(jià)值在于“邏輯簡單、不容易出錯(cuò)、一定能找到解如果有解的話”——這三點(diǎn)在做算法題時(shí)比性能更寶貴。2. 枚舉策略與表達(dá)式結(jié)構(gòu)2.1 三層枚舉數(shù)字排列、運(yùn)算符選擇、括號形狀枚舉過程可以分成三個(gè)獨(dú)立維度分別枚舉后再組合成完整表達(dá)式第一層數(shù)字排列4張牌的全排列用itertools.permutations一行搞定。這里有個(gè)小細(xì)節(jié)如果輸入的4張牌里存在重復(fù)點(diǎn)數(shù)比如[3, 3, 8, 8]permutations會生成重復(fù)排列。稍后去重時(shí)可以考慮這點(diǎn)但在基礎(chǔ)版里先不做處理因?yàn)橛?jì)算結(jié)果不受影響只是會輸出多條重復(fù)解。第二層運(yùn)算符組合3個(gè)運(yùn)算符的64種組合用itertools.product生成。注意product(ops, repeat3)和permutations的區(qū)別product允許重復(fù)選擇同一個(gè)運(yùn)算符permutations不允許。這里需要出現(xiàn) 這樣的組合所以必須用product。第三層括號結(jié)構(gòu)括號是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正好對應(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)有的讀者可能會問(a x (b y c)) z d和((a x b) y c) z d看起來差不多為什么要算兩種因?yàn)樗鼈儗?yīng)的計(jì)算順序不同可能導(dǎo)致不同結(jié)果。比如數(shù)字[1, 2, 3, 4]((12)3)×424而(1(23))×424雖然結(jié)果相同但結(jié)構(gòu)不同。枚舉時(shí)寧多勿缺把5種全列出來最保險(xiǎn)。2.2 用逆波蘭表達(dá)式統(tǒng)一處理括號直接枚舉中綴表達(dá)式再套括號代碼寫起來容易出錯(cuò)尤其是要?jiǎng)討B(tài)生成(ab)×(c-d)這種字符串。我的做法是改用逆波蘭表達(dá)式Reverse Polish NotationRPN來統(tǒng)一表達(dá)。逆波蘭表達(dá)式的特點(diǎn)是操作數(shù)在前運(yùn)算符在后不需要括號就能唯一確定運(yùn)算順序。比如中綴表達(dá)式(ab)×(c-d)轉(zhuǎn)成RPN就是a b c d - ×。這樣做的好處很明顯5種括號結(jié)構(gòu)在RPN里就變成“操作數(shù)的排列順序”和“運(yùn)算符的插入位置”的組合。求值時(shí)只需要一個(gè)棧遇到操作數(shù)入棧遇到運(yùn)算符彈出兩個(gè)數(shù)計(jì)算結(jié)果再入棧邏輯極其簡單。避免了中綴表達(dá)式中嵌套括號的字符串拼接地獄。具體到代碼實(shí)現(xiàn)我不用在RPN層面計(jì)算運(yùn)算符的排列位置——只要枚舉數(shù)字全排列、運(yùn)算符組合、以及5種“括號結(jié)構(gòu)模板”每個(gè)模板對應(yīng)的是一組操作數(shù)索引序列和運(yùn)算符索引序列。以模板5(a x b) y (c z d)為例它的RPN形式是a b x c d z y。也就是說操作數(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ǔ)版代碼貼出來。這份代碼能跑、能求出結(jié)果但存在重復(fù)解的問題后面會逐步優(yōu)化。from itertools import permutations, product def solve_24_basic(cards): ops_list [, -, *, /] # 5種括號結(jié)構(gòu)模板每個(gè)模板對應(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í)際效果也不同這里簡化處理用操作符順序來區(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 # 簡單起見先把RPN序列構(gòu)造出來再統(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ì)算邏輯還沒寫完。下面給出可以落地的完整版。3.2 用Fraction避免浮點(diǎ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)庫的fractions.Fraction直接保證精確。我在實(shí)現(xiàn)里選了Fraction。原因是24點(diǎn)題目本身是“精確等于24”不是“近似等于24”用分?jǐn)?shù)徹底杜絕精度問題。另一個(gè)隱藏的好處是Fraction會自動(dòng)約分中間結(jié)果不會出現(xiàn)分?jǐn)?shù)越滾越大導(dǎo)致計(jì)算緩慢的情況當(dāng)然在這個(gè)題目里本來就不大。求值部分的完整實(shí)現(xiàn)如下from fractions import Fraction def eval_rpn(nums, ops): nums: 4個(gè)數(shù)字對應(yīng)RPN中的操作數(shù)順序 ops: 3個(gè)運(yùn)算符對應(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序列長度固定為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)的先彈出。也就是說對于減法a - b棧頂?shù)谝粋€(gè)彈出的是b第二個(gè)是a計(jì)算時(shí)應(yīng)該是a - b而不是b - a。很多初學(xué)者在這里寫反導(dǎo)致減法順序錯(cuò)誤、結(jié)果全對不上。除法同理。3.3 輸出人眼可讀的中綴表達(dá)式RPN適合計(jì)算但直接輸出8 3 8/3 3 ÷ - ÷給用戶看閱讀成本太高。所以要把RPN轉(zhuǎn)回帶括號的中綴表達(dá)式。轉(zhuǎn)換思路是給每個(gè)操作數(shù)包一層“括號保護(hù)”每次運(yùn)算時(shí)把兩個(gè)子表達(dá)式拼接成(左表達(dá)式 運(yùn)算符 右表達(dá)式)。由于每個(gè)子運(yùn)算都加了括號最終表達(dá)式雖然冗余比如(8 ÷ (3 - (8 ÷ 3)))但優(yōu)先級完全正確不需要額外判斷。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é)果一定是對的。如果你希望輸出更簡潔去掉最外層括號、去掉某些多余的括號可以在最后再做一次字符串處理但作為求解器準(zhǔn)確比美觀更重要。3.4 完整求解代碼把所有部分拼起來得到一份可以直接跑的完整代碼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)算合并順序”。 # 見 full_solver 函數(shù)。 pass寫到這我意識到用“RPN序列模板”這種表達(dá)方式雖然計(jì)算快但對讀者不友好——太抽象容易出錯(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à)。為了精確展示我在更完整的版本里會記錄計(jì)算路徑。 # 簡化版直接返回一個(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} rtttdx0vnef if __name__ __main__: cards [8, 3, 8, 3] sols solve_24(cards) print(f共找到 {len(sols)} 個(gè)解) for s in sols: print(s)這份代碼的問題在于build_expr不考慮具體是哪種形狀命中的導(dǎo)致輸出的表達(dá)式有時(shí)和實(shí)際計(jì)算路徑不一致。下面給出一個(gè)“記錄路徑”的改進(jìn)版可以精確輸出命中解對應(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ì)算后的值以及對應(yīng)的表達(dá)式字符串 val apply_op(a, b, op) if val is None: return None, None return val, f({expr_a} {op} {expr_b})然后對每個(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ù)但清晰壞處是代碼長好處是出錯(cuò)了很容易定位。我在正式實(shí)現(xiàn)時(shí)就是5個(gè)函數(shù)“復(fù)制粘貼改順序”反而比抽象模板好維護(hù)。完整版代碼放在個(gè)人倉庫里這里展示形狀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, frtttdx0vnef) 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}, frtttdx0vnef) 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á)式一定對應(yīng)真實(shí)計(jì)算路徑不會出現(xiàn)數(shù)學(xué)等價(jià)但結(jié)構(gòu)不對的表達(dá)式。4. 去重優(yōu)化與性能表現(xiàn)4.1 重復(fù)解的產(chǎn)生原因跑一次[8, 3, 8, 3]就會發(fā)現(xiàn)輸出結(jié)果里有大量“看似不同實(shí)則一樣”的表達(dá)式。比如((8 ÷ (3 - 8/3)))和(8 ÷ (3 - (8 ÷ 3)))本質(zhì)是同一個(gè)解只是括號寫法不同。(8 × (3 (3 - 8)))和((3 (3 - 8)) × 8)互為交換律數(shù)字順序不同但結(jié)構(gòu)完全等價(jià)。(8 ÷ (3 - 8/3))和(8 ÷ (3 - 2.666..))中后者的8/3會先算再到3里減屬于同一路徑不同寫法。如果目標(biāo)是“求解”重復(fù)解不影響功能如果目標(biāo)是“給出一份優(yōu)雅的解列表”就必須去重。去重策略可以從兩個(gè)層面做字符串層面去重對外層括號和多余括號做歸一化比如全角半角統(tǒng)一、去掉最外層括號。結(jié)構(gòu)層面去重記錄每個(gè)解的計(jì)算樹結(jié)構(gòu)將等價(jià)樹合并。這個(gè)實(shí)現(xiàn)較重適合大規(guī)模搜索。我在工具腳本里用的是輕量方案——把表達(dá)式字符串中的所有等號、空格去掉統(tǒng)一成緊湊形式再用集合去重。順手把((ab)c)和(a(bc))這類結(jié)合律導(dǎo)致的重復(fù)也合并掉因?yàn)檫@類重復(fù)在數(shù)學(xué)上完全等價(jià)用戶看多了會煩。4.2 耗時(shí)實(shí)測用[1, 2, 3, 4]測試完整枚舉7680種組合Python跑完大約需要純枚舉RPN計(jì)算約30毫秒。增加表達(dá)式字符串構(gòu)造約80毫秒。不去重直接打印解的數(shù)量大約在110條左右。對于一個(gè)簡單腳本來說完全夠用。就算你想一次性求解所有可能的4張牌組合13^4 28561種總耗時(shí)也在幾分鐘級別屬于可以接受的批量任務(wù)范圍。4.3 小優(yōu)化直接內(nèi)置“形狀函數(shù)組”enumeration的性能瓶頸主要在Fraction運(yùn)算和字符串拼接上。如果只是判斷“有沒有解”可以放棄字符串構(gòu)造只做數(shù)值計(jì)算同時(shí)把5個(gè)形狀函數(shù)合并成一個(gè)循環(huán)內(nèi)部的函數(shù)調(diào)用列表減少Python函數(shù)調(diào)用開銷。實(shí)測能把單局耗壓到10毫秒以內(nèi)但寫代碼的復(fù)雜度會上升。對學(xué)習(xí)用途來說清晰優(yōu)先于極致性能。5. 常見問題與排查實(shí)錄5.1 除數(shù)為零導(dǎo)致程序崩潰這個(gè)最容易踩。枚舉過程中會頻繁出現(xiàn)類似3 ÷ (4 - 4)這種除零情況。如果你直接寫a / b而不判斷b是否為0程序會拋出ZeroDivisionError。解決方案是在apply_op里顯式判斷如果除數(shù)為0直接返回None上層收到None就放棄這條分支。不要小看這一步——不做判斷的話看似偶爾觸發(fā)但枚舉量一大幾乎每局都會崩。5.2 浮點(diǎn)數(shù)判斷result 24永遠(yuǎn)為False如果用float計(jì)算并且用判斷會漏掉不少解。比如8 ÷ (3 - 8/3)浮點(diǎn)結(jié)果是23.999999999999996和24 比較返回False。我的解決方式是改用Fraction一次到位。如果你已經(jīng)寫好float版本也可以把等號判斷改成abs(result - 24) 1e-9但這屬于補(bǔ)丁式修復(fù)不如Fraction干凈。5.3 相同數(shù)字重復(fù)出現(xiàn)導(dǎo)致解重復(fù)輸出輸入[8, 3, 8, 3]時(shí)permutations會把兩張8互換的情況當(dāng)成不同排列于是同一個(gè)解出現(xiàn)多次。很多人在這一步誤以為自己的枚舉邏輯有問題其實(shí)只是排列本身包含了重復(fù)元素。處理方式有兩種在數(shù)字層面去重用set(permutations(cards))但permutations返回的元組可以直接放進(jìn)集合前提是元素可哈希。在結(jié)果層面去重收集所有表達(dá)式字符串后用set()去重。我推薦兩者都做先數(shù)字去重減少計(jì)算量再表達(dá)式去重保證輸出干凈。5.4 表達(dá)式括號過多影響閱讀rpn_to_infix或形狀拼接法生成的表達(dá)式往往帶滿括號比如((8 ÷ (3 - (8 ÷ 3))))。閱讀還行但一旦輸出十幾條就有點(diǎn)累。可以做一個(gè)括號清洗函數(shù)去掉最外層括號、對(ab)c這類“冗余括號”做檢測刪除。注意清洗時(shí)不能改變運(yùn)算優(yōu)先級所以要用一個(gè)簡單表達(dá)式求值器驗(yàn)證清洗前后結(jié)果一致。我這里偷了個(gè)懶直接不去括號保持原樣避免清洗邏輯引入新bug。5.5 無解的情況怎么提示[1, 1, 1, 1]這種組合無解。代碼返回空列表即可。但排查時(shí)需要確認(rèn)到底是“真無解”還是“代碼有bug漏解”。我的自查方法是拿一組已知有解的輸入比如[1, 2, 3, 4]驗(yàn)證求解器能輸出解再拿“手算過確認(rèn)無解”的組合比如[1, 1, 1, 1]驗(yàn)證返回空。兩步都過了基本可以確認(rèn)枚舉邏輯沒問題。6. 擴(kuò)展思路與后續(xù)優(yōu)化方向24點(diǎn)枚舉求解器雖然代碼簡單但延伸出來的知識點(diǎn)不少。順著這個(gè)項(xiàng)目往下走可以做幾個(gè)有意思的擴(kuò)展擴(kuò)展一求解全部4張牌組合遍歷13^4種組合統(tǒng)計(jì)可解率。我試過跑全量結(jié)果可以畫成一張“難度分布圖”——有些數(shù)字組合有幾十個(gè)解有些只有一兩個(gè)解還有些完全無解。這個(gè)過程對理解“數(shù)字空間中的表達(dá)式覆蓋范圍”挺有幫助。擴(kuò)展二生成24點(diǎn)題目供游戲使用反向思考如果我想生成一個(gè)“保證有解的24點(diǎn)題目”可以先枚舉所有組合挑出語句結(jié)構(gòu)優(yōu)雅、解法數(shù)適中的組合比如1~5個(gè)解的作為題庫。輸出成cards - expr的映射文件存成JSON可以直接作為小游戲的后端數(shù)據(jù)。擴(kuò)展三多解匯總與解法排序?qū)γ總€(gè)有解組合按“解法的復(fù)雜度”排序比如優(yōu)先展示只用加減、或只用乘除的簡潔解法把復(fù)雜的長表達(dá)式排后面。這需要定義復(fù)雜度分?jǐn)?shù)最簡單的做法是統(tǒng)計(jì)表達(dá)式中運(yùn)算符的種類數(shù)——種類越少越“優(yōu)雅”。擴(kuò)展四可視化表達(dá)式樹把每個(gè)解對應(yīng)的運(yùn)算樹畫出來配合matplotlib或graphviz可以讓用戶直觀看到哪兩個(gè)數(shù)先算、哪兩個(gè)再算。該擴(kuò)展對教學(xué)場景特別有用能幫助新手理解運(yùn)算順序和括號的作用。7. 寫代碼時(shí)踩過的兩個(gè)坑最后分享兩個(gè)實(shí)際操作中印象深刻的坑。第一個(gè)坑是減法順序。RPN求值里先彈棧的是右操作數(shù)很多初版代碼在apply_op直接寫成a - b但變量名指代不清。我曾經(jīng)在一個(gè)版本里把a(bǔ)、b搞反導(dǎo)致[1, 2, 3, 4]這種簡單輸入都解不出來。排查方法很簡單打印中間每一步的棧內(nèi)容和計(jì)算結(jié)果肉眼對照一遍就知道哪一步算反了。寫算法題不要怕用print調(diào)試小邏輯越復(fù)雜越需要即時(shí)反饋。第二個(gè)坑是“形狀函數(shù)漏寫”。五種子結(jié)構(gòu)對應(yīng)五種二叉樹形態(tài)但只要漏掉任何一種某些特殊組合就會漏解。比如[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的所有四元組確保每種組合都能找到解或有明確無解的結(jié)論防止形狀遺漏。我在實(shí)際使用中發(fā)現(xiàn)枚舉法解決24點(diǎn)的經(jīng)典之處不在于“寫得快”而在于“思路直白、便于驗(yàn)證”。沒有復(fù)雜的貪心策略沒有狀態(tài)轉(zhuǎn)移方程就是老老實(shí)實(shí)列所有可能、算所有結(jié)果。對于算法入門的同學(xué)來說這個(gè)題目麻雀雖小五臟俱全有排列組合、有表達(dá)式解析、有精度處理、有去重邏輯是一道性價(jià)比極高的練手題。之后如果再做類似的窮舉類題目這套“枚舉維度劃分、中間結(jié)果緩存、路徑記錄”的套路可以反復(fù)套用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本淫乱女一区二区三区视频| 人人潮人人摸| 午夜传煤十二区精品| www.四虎在线| 啊啊啊好大好湿| 熟女突然公开看18禁影片| 亚洲少妇免费视频\| 美女露胸露尿口| WWW啪啪的com| 中文字幕三四区| 粉嫩久久久极品| 欧美亚洲丝袜人妻制服99| 国产人妖视频一区在线观看| 日韩操啪| 国产JDAV无码视频在线观看| 亚洲国产精品无石码久久| 蜜桃久久精品一区二区三区| 亚洲色图国产另类| 日韩女优在线| 国产欧美日韩女同性恋ww喷水精品 | 夜夜騷av、一區二區| 岛国精品视频在线观看| 老司机午夜精品视频| 欧美另类天堂| 亚洲精品丝袜| 久久999久| 丁香六月激情综合| 成人黑料社久久| 亚洲欧美日韩免费电影| 欧美精品久久久久久久丰满| 2017av无码免费无线播| 九九九网站| AV天黑人| 高清有码一区二区| 欧美色图20p| 亚洲精品久久久久久| 亚洲综合夜色| 欧美一区二区三区成人性生活| 夜夜中出国产| 哈哈操电影AV| 91天天c| 少妇六月天| 防屏蔽在线视频| 18禁免费视频| 日韩精品国产一区二区| 日韩人妻播放| 婷婷五月天色色| 天天操天天舔| 密桃99999| www久久99| 91操人| 快播久久人人aV| 蜜桃久久精品一区二区三区| 丰满人妻一区二区三区四| 8x福利精品第一福利视频导航| 超碰在线欧美性爱激情| 亚洲一级性爱视频免费看| 欧美一级久久久久久久大片动画| 秋霞影音一区二区三区| 欧美婷婷| 日韩精品人妻中文字幕有码午| 性色高清在线| 国产AV天美传媒一区二区三区 | www.久久制服糖| 我要去看2个日本美女.com曹逼| 欧亚无码视频| 久久久无码av精| 欧美性爱视频免费一区一A | 99热国产| 色姑娘综合网| 国产黄片精品在线| 天综合网| 夜夜青青无码影院| 欧美一级二级三级| 国产精品不卡一区二区电影| 日韩激情小说一区二区| 97香蕉碰碰人妻国产欧美| 夜夜嗨一区二区| 夜夜嗷嗷一区二区| www欧美91| 一二三区操逼国产91| 在线A日本| 思思热在线观看| 91网亚洲| 精品69网| 自拍大香蕉乱插| 亚洲人妻日日日| 一级人妻性爱视频| 免费观看有码高清视频| Aa东京男人的天堂| а√天堂资源官网在线资源| 亚洲国产无码精品首页久久久| 97资源制服丝袜| 少妇色综合| 欧美在线啊啊| 99色视频| 国产黄a三级三级三级av在线看| 嗯嗯啊啊好疼| 欧美97网| blacked精品一区国产| 性色高清在线| JIZZJIZZ亚洲女人被躁| 美日韩成人| 91美女在线视频| 99re黄 | 亚洲熟妇白浆无码AV| A级在线视频| 九九99精品| 久久99999| 欧美国产婷婷久久| 久久久久9| 丝袜天堂| 日韩中文字幕国产| 欧美日日夜夜| 亚洲综合第一页| 亚洲操逼网| 亚洲砖码砖专无区2023| 啊啊啊不要啊啊受不了了视频在线 | 啊啊啊啊啊啊啊啊啊在线观看| 伊人国产成人av网站| 五月丁香成人网| 成人天天爽| 日韩中文字幕精品一区在线| 按摩中文字幕| 先锋影音av先锋一区| 五月丁香婷婷综合| 成人怡红院| 亚洲色啪| 99久久99九九99九九九| 永久免费发布性爱网| 久久综合中文国产| 激情小说日韩无码| 破处bbq| 久久三| 97超碰这里只有精品| 国内偷自视频区视频综合| 大香蕉综合| 国产精品分类在线观看| 亚州熟妇精品| 国产精品青草综合久久| 99999这里都精品| 人人操人人操人人操人人操人人操人人人11.CM | 亚洲欧美日韩有码| 欧美爱三级日韩久久| 91麻豆天美国产| 97综合在线观看| 神马久久久久| 日韩三级久久久| 国产成人在线观看网址| 九九拍拍精品视频在线播放| 美国人人操人人操| 天天日天天干少妇日| 亚洲性综合9| 欧美性xxxxx狂欢| 任我爽视频在线观看| 九九九热| 欧美色图99| 五月婷丁香| 亚洲色图欧美色图另类图片| 黑人性欧美| 色999偷自拍拍| 精品高清一区二区三区三州| 激情欧美97| 久久久久久久久久久久久久久乱码 | 日韩激情无码影院| 久肏视频字幕| 大香蕉十区| 国产精品无码在线| 青青操网| 日韩综合第八区国产精品| 日韩AV电影网站| 欧美一级黄色免费专区| 久艹免费| 97精品国产97久久久久久免费| 91精品无码久久久久久久| 性生活无遮挡纯毛片在线看| 蜜臀av一区二区三区免费观看| 无码精品久久久久久亚洲| 激情婷婷综合久久| 久久久天美| 丰满少妇一区二区三区四区观看| 亚洲偷拍自拍在线视频| 秋霞蝌科网日本一区| 中文字幕一二三| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 亚洲不卡不卡中文字幕不卡| 久热影视| 欧美性xxxxx狂欢| 欧美 亚洲 综合 制服 另类| 大香蕉在线视频15| 色婷婷成人| 亚洲一级性爱视频免费看| 激情一区二区| 九九这里只有精品| 97亚洲国产影视| 99性视频| 日本熟妇人妻中出视频| 黄视频免费| 青草精品视频日本久久久久网站在线| 国产风韵犹存熟妇三区| 欧美色日本| 天天综合网久久ww| 99re6久热只有精品6在线直播| 蜜臀AV网站| 精品国产丝袜一区二区三区乱码 | 麻豆久久久久久久久丝袜| 国产福利影视| 亚洲欧美国产其他二区| 最新无码国产| 亚洲āv网址在线观看| 91狠狠综合久久| 亚洲最大无码中文字幕网站| 中文字幕国产| 一区二区影院| 啪一啪免费视频| 狠狠中文字幕| 中文字幕av乱伦| 亚洲av综合色区无码一| 精品人妻中文字幕4399| 国产一区二区三区白丝| 3028国产精品| 18禁美女裸体无遮挡啪啪| 丰满岳乱妇一区二区三区| 婷婷伊人五月| 狠狠色狠狠色狠狠五月| 国产欧美日韩精品中文| 99性爱视频| 欧美日不卡| 亚洲精品蜜桃久久久一区二区三区| 男人的天堂网免费| 91n美女视频| 日韩内射视频| 日本九九久久99| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久操视频免费观看| 欧美亚州综合网图片| 亚洲无码日韩电影| 一本精品日本在线视频精品 | 老女人碰碰在线碰碰视频| 日韩AV一区二区三区三州三州| 亚洲乱色视频一区、二区在线| 青青国产精品在线| 久久精品六区| 爱射综合| 都市激情人妻一区二区青青操视频 | 欧美性爱伊人| 欧美综合骚| 久久久穴999| 国产诱惑| 蜜臀在线视频| 白嫩国模丰满一二三区| 麻豆人妻精品一区二区| 超碰在线人妻不卡| 欧美日韩国产精品久久色婷婷| 久夜操| 欧美偷拍区| 最新国产精品久久精品| 国产丰满熟夫69mpp| 夜夜嗨一区二区三区三州加勒比| 国产精品久久| 亚洲蜜桃V妇女| 性欧美另类高清| 美女干逼2| 黄色无码高清黄色无码网站| 户外裸露刺激视频第一区| 欧美日韩国内不卡| 亚洲熟女综合| 玖玖久久久| 黑人白女精品一区| 久久免费老司机精品| 天天色怡春院| 久久久新亚洲AV| 超碰性爱97| 欧美日韩啪啪电影| 亚洲在线欧美| 欧美日韩国产三级黄色| SS久久| 亚洲熟久久| 色爱亚洲| 蜜桃精久三区| 黑人性暴力毛片| 亚洲中字幕日本一区二区三区| 黄色视频高清无码网站| www成人啪啪18秘 免费| 色爱三区| 国产精品久久久久久久久久久久久久久久久久 | 调教熟妇 久久久久久| 在线女人91| 大香蕉99re| 久久久国产av美女私房| 国产玖玖| 男人天堂毛片| 欧美少妇性爱网站| 男人干美女| 欧美日韩操逼嗦吊| 日日干日日操五月天伦理视频| 在线观看啊啊啊啊啊| 国产拍偷精品网站| 久久久久久性爱片| 麻豆天美91| 99re国产中文字幕| 欧美性色欧美| 香蕉综合网| 色综合1991| 国产日产精品久久快鸭的功能介绍| 韩国三级理论在线| 久久久∴| 日韩黄色一区二区三区| 91精品91久久久中77777| 欧美成人A√在线一区二区| 搡老熟女老女人老熟妇免费视频| 韩国女主播青草福利视频| 噜噜噜亚洲精品| 91久久午夜无码鲁丝片久久人妻| 中文字幕少妇色| 国产亚洲精品玖玖玖在线观看| 九九九九热| 九月伊人中文字幕| 美女啊啊啊啊啊啊| 亚欧美无遮挡| 色偷偷男人的天堂麻豆| 国产精品在线网站| 欧美91在线+|+欧美| 精品十三区| 99综合自拍| 性色国产东北露脸精品视频| 五月天色图| 欧洲射精91| 97色诱| 超碰精品| 91女优在线观看| 欧美日韩人人早| 日日黄色三级网站| 国产成自自拍在线观看| 五月丁香激情综合网| 亚洲操人| 大奶啊啊好爽| 日日骚一区二区三区| 久草毛片| 免费A片三p视频| 伊人久大| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 亚洲AV无码AV吞精久久久久| 极品国产内射| 五月天黄色av| 精品九九九九九| 男人天堂2019亚洲| 美女91AV| 性性欧美| 欧亚性爱视频免费看| 精品综合久久久久久97| 久久99热这里只频精品6学生| 日本久久久精品电影| www.男人天堂| 亚洲一区日韩| 精品大久久| 一级乱伦网站| 亚洲国产91精品一区二区久久| 国产精品com| 92性色国产午夜福利在线661 | 久99久视频| 成人免费在线网站| 欧美精品在线观看| 精品无人区麻豆乱码1区2区图片| 老熟妇91| 国产区性爱在线视频秋霞豆 | 亚洲欧美伦综合| 美女操逼A A| 亚洲熟女av日韩熟女| 第四色亚洲色图| 免看60秒涩涩视频| 欧美性爱18观看| 99爱在线视频| 激情文学亚洲| 一级成人性爱| 后入式在线免费观看60秒| 精品人妻av在线播放| 免费观看网黄| 久久综合女优| 五月亭亭六月丁香| 人人操人人狠狠操| 精久久久| 影音先锋中文字幕日本好一区二区| 欧美视频第二页| 日韩免费福利在线观看| 免费夜夜爱黄色视频毛片| 91一区二区| 性色中出| 少妇色综合| 精品人妻免费观看| 色99视频| 伊人国产AV| 久久91视频| 美女的肌被草喷水视频| 99国产女人| 岛国精品视频在线观看| 淫骚熟女一区二区三区| 十八禁电影伊人网| 黄页av| 丝袜 亚洲 偷拍| 久99在线免费观看视频| 久久久久久亚洲Av无码精| 夜草欧美| 亚洲午夜免费狠狠干| 91nbbbbbb| 九九碰九九爱97超碰| 91丝袜熟女| 九色97| 九九无码视频| 亚洲欧美在线观看无码| 欧美色乱| 熟女熟妇一区二区三四区| www.AV有限公司一区| 日本中文熟女视频| 婷婷综合激情| 免费av在线播放二区| 春色综合免费| 美女啊啊啊啊啊啊| 亚洲AV免费在线观看| 五月天色图| 国产三级日产三级韩国三级 | 在线观看无码三级少妇| 亚洲情色综合网| 综合五月天| 天天影视色香欲综合网小说| 欧美在线55555| 91强奸乱轮| 亚洲欧美首页| 中国黄色特级精品一区二区三区片| 日本女人操逼| 免费精品国偷自产在线在线| 一区二区亚州激情久婷婷欧美| 97香蕉碰碰人妻国产欧美| 97爱爱爱| 一二三四区电影| 久久久久精| 东亚亚洲无码高清| 自拍偷拍 日韩欧美| 91碰碰| 91亚洲精品青草| 精品亚洲国产成人av网站| 欧洲精品二区| 搡老女人老91妇女熟女| 麻豆影音天美视频| 一级黄色影片| 亚洲日韩精品一区视频在线| 久96热在线观看视频| 加勒比av网| 免费看污网站| 超碰狠狠操| 日韩免费在线视频观看| 狠狠91| 久热精品在线| 国产日韩欧美| 日夜久久久九九九久| 狠狠欧美| 五月激情天| 国产麻豆一级精品视频| 日韩欧美中文| 一级性爱啪啪视频| 日韩三级在线观看网站| 亚洲欧美黄| 色狠狠一区二区三区香蕉| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 色色色五月婷婷| 欧美亚洲| 国产精品女久久久久av爽| 免费AV中文网在线观看| 天天cao在线| 综合自拍| 亚洲国产97在线精品一区| 狠操91,com| 伊人 俄罗斯 a v| 97超碰逼| 99国产精品在线观看| av天堂影视中文在字幕在线中文| 99热精品在线在线| 91色久| 欧美日韩第一页| 综合欧美日本三级| 欧美视频在线视频免费va| 亚洲操逼无码| 五月丁香激情综合网| 亚洲国产无码精品首页久久久| 亚洲日韩美女中文字幕乱| 亚洲精品性爱片| 99久久精品无码一区二区毛片免费 | 欧美在线55555| 欧美激情片一区二区| 亚洲色图加勒比| 91天天综合网,天天综合网| 九九九综合精品| 无码heyzo高清一区| 有码免费观看| 西西美女视频网| 黑人精品久久97| 亚洲文学偷乱拍啪啪啪啪| 99久在线精品99re8热视频在线| 久草精品视频| 超碰在线在公开超碰在线在公开| 天天干人妻视频| 色臀AV| 欧洲在线性爱视频| 欧美一级特黄淫片在线观看| 久久‘黄片视频| 丁香九月婷婷| 天天摸夜夜摸| 97精品97久久| 9久久精品| 97无码视频在线播放| 欧美日韩免费性爱| av一区二区三区 中文| 夜夜肏2021| 国产精品suv一区| 色97综合中文字幕| 少妇一区二区三区| 约操熟妇| 狠狠操夜夜操蜜桃视频三区| 97久久超碰国产网站| 欧美熟女丝袜| 97资源久久| 国产操伦| 九九在线视频| 是还免费视频1727我| AV天堂因数| 亚洲欧美国产中文视频| 亚洲精品a人片在线观看视| 97人人射| 97精品97| 亚洲狠| 人人摸.人人色| 亚洲人妻av| 亚洲精品国产精品乱码不卡| 91熟女丨老女人| 成人精品久久久午夜福利| 国产精品亚洲美女久久久久| 中文字幕视频2区| 国产AV线| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 亚洲精品精品一区二区| 欧美三级免费伊人| 欧美丝袜中文字幕07在线| 国产美女口爆吞精视频| 人妻AV在线| 99热日| 国产91福利小视频在线观看| 久操热线| 黑人精品久久97| V A在线| 免费毛片在线播放| 情色五月天网| 日韩一级性爱无码| 日韩在线视频1234| 风间由美日韩欧美久久| 欧美不卡二区| 97大色网| 午夜国产成人精品视频| 久久精品国产精品亚洲艾通辽熟妇 | 一二三四区电影| 国产一区自拍欧美日韩| 久久一二区四| 精品人妻av区天天看片| 亚洲国产日韩欧美熟妇在线| 色哟哟精品1精品2| 51一区二区三区| 神马久久久久久久久久| 波多野结衣AV无码一区| 亚洲熟妇丝袜在线观看| 9Ⅰ老熟女| 99热成人| 欧美97在线欧| 久久黄黄| 久久久久久久97| 久久99综合| 欧美色蜜桃97| 狠狠穞A片一區二區三區| 色天使AV天堂| 色情综合| 少妇熟女一区二区三区| 夜夜操狠狠操| 亚洲精品人体| 中文字幕精品丝袜| 爱妃国产亚洲视频中文字幕| 久久大线蕉一区| 国产精品久久久久久久久久梁医生| 又黑又大又粗| 超碰免费人妻人人| 少妇500双飞99| 久久久久免费看少妇A片特黄| 91美女视频在线| 国产精品爱欲| 久久宗合亚洲| 无码少妇精品一区二区60岁老人| 国产av色网| 337p大胆噜噜噜噜噜91Av| 国产精品伦理| 久久这里都是精品| 综合伊人激情| 97热视频在线观看| 性爱av网站| 亚洲一区二区av| 口爆综合网| 秋霞一集毛片观看| 青青草成人视频在线观看二区| 亚洲高清国产理伦片| 久久9免费视频| 婷婷五月花| 中文字幕久久婷婷丁香五月天| 天天享受天天看| 久久无码成人| 欧美性爱超碰97| 欧洲综合视频| 久操网线| 91精片| 久操网在线| 色综合色色| 中文字幕丰满人妻日本| 综合激情一一91| 99精品视频在线观看| 懂色aV一区二区天美传媒| 欧洲与亚洲欧美精品中文字幕| 操逼网站视频漫画国产| 少妇色| 九9热伊人| 美女诱惑1区2区| 美女午夜福利免费视频| 在线中文字幕视频| 久久宗合亚洲| 亚洲AV免费在线观看| 日韩丰满熟妇| 成年人网站在线免费观看| 无码操逼天堂| 操穴国产| 91GD.COM| 2017人人操,人人摸| 日韩三级av片| 中文一区在线日| 涩五月婷婷| 人人操人人干网页| 国产熟女精品一区二区| 99色在线| 国产肏屁眼视频| 亚洲色图20p| 国产AV人人夜夜澡人人爽麻豆| 三级日韩一区二区三区| 亚洲色图 91| 大香蕉欧美日韩| 极品色社| 五月天婷婷色色| 亚洲精品自拍| A一级色女| 在线 亚洲 网爆 自拍| 激情五月丁香五月| 91精品人妻电影| 国产 亚洲 一二三四| 一区二区影视| 亚洲成人在线乱码色午夜| 欧美伦乱爱| 夜夜爽妓女| 裸体美女国产免费久久久网站| 深夜激情无码| 成人无码影片视频在线| 人人看人人爰人人操| 性夜影院爽黄A爽免费动漫| 春色91| 亚洲 欧美 日本 国内 首页| 秋霞福利网| 国产久久一区二区| 蜜桃色院一区久久 | 最新日本中文字幕| 97色亚洲| 久久超碰97| 99在线精品视频| 亚洲男人天堂手机版| 欧美日韩一二三| 午夜噜噜噜| 国产精品一区在线播放| 黄色成年| 酒色综合网| 伊人91| 欧美亚洲情色| 免费A片三p视频| 久久精品人人做人人看| 熟妇的味道HD中文字幕| 欧美一级久久久丰满| 亚洲第一精品在线视频| AA特级绝黄| 亚洲无码超碰免费| 青娱乐二区免费| 国产亚洲精品激情| 国产精品呦一区二区三区| 日本一区二区三区四区免费观看| 日韩不卡毛片Av免费高清| 五月天玖玖资源站| 久久人妻视频| 蜜桃久久久久久久| 天操老女人| 天天热精品| 噜噜噜噜久久久精品免费| 精品999一区二区| 欧美性xxxxx狂欢| 天天插夜夜操| 国产女人成人精品视频| 天天舔天天 | 一区二区三区男女操逼黄色小电影| 91最新综合| 91久久久久久久| 91性网| 日韩欧洲操屄视频| 免费簧片在线观看| 亚洲黑丝在线| 日本最新免费韩国1区2区视频播放| 日韩二区三四区五区六区在线看| 精品人妻一区二区三区视频在线| 国产粉嫩蜜臀av一区二区三区| 国产欧美日韩一区二区三区| 开心五月婷婷激情| 国产白嫩精品久久| 韩日自拍| 成人国产视频在线观看| 成人 日本A片无码8888| 女人爽到高潮久久久| 91美女色视频亚洲| 欧在线一二区| 在线观看岛国有码| 美女露胸露屁股| 物业黑人 AV一区| 日韩欧美日韩| 福利在线黄片| 你草精品在线视频| 亚洲黄色电影| 日本欧美一区二区三区免费| 97精品国产97久久久久久免费| 人妻黑丝袜电影| 麻豆精品一区二区三区四区免费观看| 国产精品自拍xxxx| 嗯嗯啊啊操死我| 骚日日av| 成人七区| 欧美午夜色妇色鬼| 伊人91| 国产一级作爱毛片| 欧美一区二区在线资源| 中文字幕视频二区| 欧美日本国产日韩激情视频| 免费农村成人少妇人妻Aa一区二区视频| 亚洲在钱| 久久五月天婷婷丁香中文字幕| 日本精品一区三区| 亚洲人妻久久久| 日本 色 导航| 性欧美天天| 成人久久久| 九热视频| 中文字幕第二页| 婷婷视频在线免费观看| 欧美A√综合网| 黄色成人网久久久久久| 亚洲色图激情小说| 免费在线视频97| 日本肉体xxxx裸交| 亚洲涩图欧美| 成人5码视频| 91性| 久操网址| 少妇内射www在线观看视频| 超碰在线人妻中文字幕| 亚洲美女精品| 女沟厕偷窥piss小便| 日本 成 人 小说 电影 一区二区| 97爱爱官网| 亚欧性爱在线无码| 亚洲欧美激情小说| 免费看日产一区二区三区| 国产AV线| 亚洲成?V人片在线观看福利| 国产精品午夜精品| 日本精品第一视频在'| 91网站在线播放| 日韩AV熟女乱伦| 激情另类激情| 丁香久久| 精品99999| 亚洲国产一级中文综合久久天堂在线免费观看 | 欧美日韩性感| 日韩三级伊人| 日日干日日操五月天伦理视频| 成年无码动漫av片无尽在线 | 韩国轻伦国内自拍一区| 男女做爰猛烈动高潮A片免费应用| 蜜桃在线观看一区二区三区| 欧美午夜视频免费观看| 久草在| 精品区国产区一区二区三区| 国产AV天美传媒一区二区三区 | 久久性爱网站| 日本道人妻久久久在线不卡色视频| 91精品黄在线观看| 草草草草视频| 欧美精品第四五页中文字幕在线观看| 免费福利视频中文字幕| 亚洲综合69| 五月丁香婷婷色| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 久久毛卡| 超碰97极品9| 久久久草成人网站久久久草成人久久久草久久久| 亚洲在线91| 好看的91视频| 在线观看国产黄色| 九九碰九九爱97超| www.AV有限公司一区| 99热只有这里有精品| 亚州性色| 国产成人主播| 久久婷五月天| 中文字幕美女91| 日韩丨制服丨中文|在线| AA丁香综合激情| 老司机天天操| 97碰碰色| 中文字幕神马久久| 天堂蜜桃无码视频一区二区| 国产日韩欧美中文在线播放| 大鸡巴久久| 青青青艹在线视频| 亚洲人成网www| 国产传媒操逼视频| 日本综合色图| 中文字幕精品亚洲熟女| 精品人妻二区三区| 亚洲日本韩国在线| 人妻无一区二区三区| 91美女视频。| 日韩 成人 有码| 久久久爆乳翘臀一线天伦理视频| 成人自拍三级在线观看| 男女啊啊啊| 亚洲污污网站| 亭亭丁香激情| 久久怡红院| 乱伦Av网| 97超碰精品图片| 亚洲欧美天堂| 中文字幕日韩情色| 国产精品密臀网在线观看| 蜜臀少妇一区二区| 日本一区二区做爱的视频| 粉嫩av平台| 欧美性暴力猛交| 精品少妇人妻| 超碰 av 女人天堂| 国产女上位好爽在线| 久久精品性| 午夜福利在线合集| 中文字幕日韩电影人妻| 91美女视频| 日本大香蕉综合网| 亚州高清AV| 骚货 中文字幕 av| 桃色人妻在线视频| 大香网伊人久久综合网eew| 国产欧美美女免费观看视频| 日韩成人综合网| 久久精品国产免费观看99| 五月婷网站| 成人97人人超碰人人| TS人妖另类精品视频系列| 免费视频97| 欧美日韩色| 就去色综合| 97国产中文| 亚洲第一男人天堂| 欧美女同在线| 久久网亚洲| 女上位精品在线| 另类专区加勒比| 国产精品久久久久久夜夜夜夜| 国产美女精品| 91成人在线| 97色色色综合网站| 啊啊啊啊啊啊好湿好爽视频| 啊啊啊啊啊在线视频| 色诱中文字幕| 婷婷另类小说| 婷婷15月天青娱乐| 99re在线视频| 久久亚州大香蕉| 欧美第五页| 蜜臀99久久国产| 国产精品久久蜜乳av| 欧美综合91| 日韩免费中文字幕视频| 日韩熟女无码| 亚欧免费| 日本www操操操| 激情专区综合| 91久久精品蜜臀| 人妻在线中出视频| 久久蜜色情在线视频xxx免费观看| 你草精品在线视频| 一本久久精品中文字| 欧美九一精品久久久熟妇| 综合亚州欧美| 中国人高清www色视频免费| 午夜啪| 黄色AAAAAAAAAAA大片| 久久香蕉综合一本到3atv| 九九人人操| 久久这里都是精品| 99国产精品免费| 9997se| 亚洲一区二区三区婷婷| 日本黄大片在线观看视频| 岛国网址国产 | 青草草免费网站av| 国产精品岛国片在线观看| 九九碰九九爱97超碰| 神马视频久久久久久| 精品美女少妇一区二区三区| 91精品少妇搡搡搡| 日韩精品人妻一区二区| 国产女s强制榨精视频| 91三级理论片播放器| 欧美一级三级| 国产青青美女玩逼视频| 亚洲自拍小说| 欧美特大AA级黄片| 免费看久久久性性| 强上我不卡卡| 亚洲熟妇AV日韩熟妇在线| 69精品| 亚洲高清国产理伦片| 成人情色一区二区| 国产熟妇一区二区| 青娱乐91| 91成人久久 | 天天看特黄的免费网站| 蜜臀网址在线| 91人妻最真实刺激绿帽| 玖玖在线视频| 超碰98综合网| 天天干人人看综合| 天堂种子在线www网资源| 嗯嗯嗯,草死我| 人妻丰满熟妇av无码区蜜桃| 东京热视频网| 亚洲麻豆精品二区三区| 99在线啪| 亚洲AV无码乱码| 天天干少妇| 男人成人黄色视频在线观看免费下载| 久久超碰97| 在线性黄高清免费视频| 91jk色拍| 久久久久九九九| 午夜精品视频777| 狠狠色一区二区中文字幕| 精品人妻一区二区三区在线视频不卡| 无码操逼网| 超碰97玖玖爱| 97视频在线看| 五月丁香色色网| 久久久精品一区二区| WWW操逼| 白丝1区2区3区| 伊人九九九| 国产无马av| 男人天堂网手机版婷婷| 逼操网站| 蜜臀AV成人精品蜜臀| TS人妖另类精品视频系列| 五月天成人综合| 欧美桃色网| 草莓精品视频| 嫩草 我啊~嗯~在线| 国产欧美日韩一区二区三区| 亚洲精品骚逼| 豆花视频操逼网址 | 五月丁香社区婷婷日韩欧美精品影院 | 亚洲国产欧美中文永久| 97国产伦理| 综合欧美激情网| 综合91网| 无码av永久免费专区网站| 1二区9| 久久性爱精品一区| 美女主播色欲91抠b在线播放| 五月丁香黄色网| 青青草在线视频人人想人人上 | 中国熟女91| 国产操逼逼网| 久湿久久| xxx0国产在线播放| 老女人91| 免费综合亚洲中文| 欧美性第1页| 激情综合五月| 天天综合官网| 国产蜜臀精品一区免费尤物| 国产白丝精品在线观看| 中文字幕丝袜美腿| 国产美女口爆吞精视频| 99色日| 日韩国产成人自拍视频| 啊啊啊啊,啊啊好多水 | 在线免费观看日韩一区| 内射中国少妇高清视频免费视频| 秋霞影音一区二区三区| 噜噜噜噜天天狠狠| 日日狠狠久久偷偷色综合免费| 超碰地址久久| 人妻密肉在线观看| 国产女同视频在线播放| 天天情欲宗合网| 色色五月婷| 97久久网| 婷婷精品国产一区二区三区日韩| 国产极品美女高潮无套在线观看 | 最新精品久久蜜桃| 日韩欧美俄罗斯A片| 午夜传煤十二区精品| 99久久com免费视频′| 一级二级三级黑人无码| 曰韩少妇无码| 天天综合精品| 免费看片黄| 欧美高潮| 91在线色综合| 人人摸.人人色| 国产夫妻性生活视频| 96久久科窝| 欧美日韩激情无码专区| 香蕉精品二区二区| 日少妇亚洲版| 国产精品熟女丝袜一区二区| 亚洲超碰97| 精品久久九| 91一区二区| 曰韩精品视频一区二区| 亚洲骚逼少妇| 屌妞视频久久久久久久久久久久| 黄片www.| 久久的免费性爱视频| 91亚洲欧美综合高清在线| 久久天天摸| 强奸乱伦麻豆| 亚洲男人天堂网| 欧美91色| 毛片17S| 超碰人人超在线观看| 中文字幕av亚洲精品| 人妻天天爽夜夜爽2| 美女在线H91| 欧美 亚洲 偷拍自拍| 乱伦日本中文自拍| 九九热只有精品| 无码视频一区二区| 色五月婷婷网| 家庭乱伦网站国产| 亚洲无码精品AV久久久| 999久久久久久久久| 欧美日韩大陆黑人少妇99| 色婷婷视频| 欧美人妻久久精品二区三区| 2021国产成人精品久久| 亚洲成人AB| 亚州综合图片| 97精彩视频网站| 亚洲国产成人高清在线| 亚洲欧洲综合av在线| 亚洲欧美第一页| 精品少妇一区二区| 久久99精品国产| 亚洲欧美爆| 吻戏激情性巴克| 自慰白浆在线观看| 精品人妻av在线播放| 午夜国产综合视频在线观看| 亚洲高清欧美总合| 五月天人妻综合| 日韩欧美中文字| 91爰爱欧美| 黄色小说亚洲| 国产精品乱人伊人网| 婷婷五月成人| 人人操人人狠狠操| 成人免费在线网站| 久久这里是精品| 手机午夜电影神马久久| 少妇久久久久久| 97免费视频在线| 欧美日韩小说| 啊啊啊慢点| 丰满熟妇大乳做爰| wuyechaopeng| 亚洲精品人伦一区二区| 美日韩一二三区| 330dv亚洲成年视频网| 欧美亚洲AN| 四虎免费看黄| 亚洲激情天堂网| 精品999日本| 欧美少妇性乱| 97一本大道亚洲一区| 亚洲欧美一区二区不卡视频播放| 欧美 亚洲 大香| 成人老鸭窝人人在线视频| 伊人久久国产免费观看视频| 人妻夜夜爽天天爽麻豆三区网站 | 一级久久性爱视频| 日本人人操人人操| 激情五月天社区| 亚洲国产一区二区三区四区国产| 91精品啪在线观看国产城中村| 黄片aaaaa一区| 91人人臊| 五月婷在线| 97超碰69| 在线视频一区二区传媒| 欧美日韩一干二干| 啊啊啊啊啊啊啊啊啊在线观看| 中文日韩欧美熟| 精品美女少妇一区二区| 91精品人妻| 国产在线观看一区二区三区| 岛国A V在线免费看| 日本免费一级AAA大片器 | 亚洲乱码国产乱码精网站| 欧美一区二区三区日韩| 性爱综合网| 亚洲情色1区| 亚洲国内精品成人不卡| 9.1小视频| 欧美成人性活片| 欧美探花网| 91精品国产高清久久久久久,亚洲成人 | 青娱乐二区免费| 很黄很色的视频在线观看| 日韩成人大片一区二区| 夜色五月天| 性性欧美| 国产美女高潮视频| 国产1024在线播放| 国产人伦a片信息免费片| 婷婷五月综合在线| 欧美成人精品一区二区三区| 一二三四视频在线社区中文字幕| 国产又大又粗又长视频| 久久69| 一类无码操逼视频| www.99热| 欧美日本天堂| 999国产精品999久久久久久| 久操免费在线| 午夜120视频在线观看| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 欧美亚洲激情小说| 久久人妻一区二区三区高清 | 欧日韩一二三f区|