日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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寫了個枚舉法求解器。這個題目看起來簡單——給4張牌用加減乘除湊出24但真正落地成代碼時涉及排列組合、表達(dá)式構(gòu)造、求值精度這些細(xì)節(jié)踩了一圈坑之后倒是個不錯的算法練手項目。這篇文章就用枚舉法一步步拆解24點(diǎn)問題的求解過程分享一份可直接運(yùn)行的Python實(shí)現(xiàn)代碼以及我自己調(diào)試時踩過的幾個坑。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張牌全部且僅使用一次最終計算結(jié)果等于24。很多人小時候玩過這個游戲但用程序解決時需要把“手算”的思路翻譯成計算機(jī)能執(zhí)行的邏輯。我先把這個問題的本質(zhì)拆開來看數(shù)字層面4張牌每張牌必須且只能使用一次。運(yùn)算層面3個運(yùn)算符每個運(yùn)算符從加減乘除中任選其一允許重復(fù)。結(jié)構(gòu)層面3個運(yùn)算符決定表達(dá)式的結(jié)構(gòu)但括號的存在讓結(jié)構(gòu)變得復(fù)雜比如(ab)×(cd)和ab×cd是兩種完全不同的表達(dá)式結(jié)構(gòu)。枚舉法的核心思路就是“窮舉所有可能性”——把所有可能的數(shù)字排列方式、運(yùn)算符組合方式、括號結(jié)構(gòu)方式全部列出來逐一計算看哪個組合的結(jié)果等于24。這個思路直白但關(guān)鍵在于搜索空間到底有多大、怎么組織枚舉順序才不重不漏。1.2 為什么枚舉法足夠解決這類問題先說結(jié)論24點(diǎn)的搜索空間非常小用枚舉法完全可行而且代碼寫起來比動態(tài)規(guī)劃、回溯搜索要直白得多。計算一下搜索空間的大小4張牌的全排列4! 24種。3個運(yùn)算符的排列4^3 64種每個位置有加減乘除四種選擇允許重復(fù)。括號結(jié)構(gòu)如果直接枚舉括號需要區(qū)分5種基本結(jié)構(gòu)后面會詳細(xì)說。三者相乘24 × 64 × 5 7680種情況。哪怕是Python這種解釋型語言在一秒內(nèi)跑完7680次四則運(yùn)算也毫無壓力實(shí)際計算耗時基本在幾十毫秒級別。這個規(guī)模意味著我們不需要什么高深的剪枝優(yōu)化老老實(shí)實(shí)把每種可能都算一遍就是最穩(wěn)妥的方案。當(dāng)然如果想要更高性能可以事先把所有可能的表達(dá)式樹結(jié)構(gòu)固化下來避免運(yùn)行時重復(fù)構(gòu)造也可以先用奇偶性、整除性做簡單剪枝。但對于學(xué)習(xí)算法、或者只是做個工具腳本來說這些優(yōu)化不是必須的。枚舉法的價值在于“邏輯簡單、不容易出錯、一定能找到解如果有解的話”——這三點(diǎn)在做算法題時比性能更寶貴。2. 枚舉策略與表達(dá)式結(jié)構(gòu)2.1 三層枚舉數(shù)字排列、運(yùn)算符選擇、括號形狀枚舉過程可以分成三個獨(dú)立維度分別枚舉后再組合成完整表達(dá)式第一層數(shù)字排列4張牌的全排列用itertools.permutations一行搞定。這里有個小細(xì)節(jié)如果輸入的4張牌里存在重復(fù)點(diǎn)數(shù)比如[3, 3, 8, 8]permutations會生成重復(fù)排列。稍后去重時可以考慮這點(diǎn)但在基礎(chǔ)版里先不做處理因?yàn)橛嬎憬Y(jié)果不受影響只是會輸出多條重復(fù)解。第二層運(yùn)算符組合3個運(yùn)算符的64種組合用itertools.product生成。注意product(ops, repeat3)和permutations的區(qū)別product允許重復(fù)選擇同一個運(yùn)算符permutations不允許。這里需要出現(xiàn) 這樣的組合所以必須用product。第三層括號結(jié)構(gòu)括號是24點(diǎn)里最容易繞暈的部分。我采用的方案是“枚舉5種基礎(chǔ)表達(dá)式結(jié)構(gòu)”因?yàn)?個數(shù)字、3個運(yùn)算符的二元運(yùn)算樹binary tree一共有5種不同形狀。這個數(shù)字是卡特蘭數(shù)C35正好對應(yīng)Catalan數(shù)的第3項。5種結(jié)構(gòu)如下用a, b, c, d代表4張牌x, y, z代表3個運(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)的計算順序不同可能導(dǎo)致不同結(jié)果。比如數(shù)字[1, 2, 3, 4]((12)3)×424而(1(23))×424雖然結(jié)果相同但結(jié)構(gòu)不同。枚舉時寧多勿缺把5種全列出來最保險。2.2 用逆波蘭表達(dá)式統(tǒng)一處理括號直接枚舉中綴表達(dá)式再套括號代碼寫起來容易出錯尤其是要動態(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ù)入棧遇到運(yùn)算符彈出兩個數(shù)計算結(jié)果再入棧邏輯極其簡單。避免了中綴表達(dá)式中嵌套括號的字符串拼接地獄。具體到代碼實(shí)現(xiàn)我不用在RPN層面計算運(yùn)算符的排列位置——只要枚舉數(shù)字全排列、運(yùn)算符組合、以及5種“括號結(jié)構(gòu)模板”每個模板對應(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ù)先定義好這兩個序列這樣枚舉時就只需要填充具體數(shù)值和具體運(yùn)算符不需要動態(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)模板每個模板對應(yīng)RPN的操作數(shù)和操作符順序 # (op1, op2, op3) 的排列順序由每個模板決定 # 這里用模板索引實(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) ] # 第二和第三個模板在RPN層面操作符順序一樣但求值時因?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個數(shù)字 3個運(yùn)算符的RPN序列可以預(yù)先用模板構(gòu)建 # 這里為了演示邏輯先用一個輔助函數(shù)計算 return _eval_from_rpn(nums, ops) def _eval_from_rpn(nums, ops): # 這個函數(shù)負(fù)責(zé)真正計算下文給出完整實(shí)現(xiàn) pass看到這里你應(yīng)該發(fā)現(xiàn)了上面只是骨架真正的計算邏輯還沒寫完。下面給出可以落地的完整版。3.2 用Fraction避免浮點(diǎn)精度問題24點(diǎn)實(shí)現(xiàn)里最容易翻車的地方是浮點(diǎn)數(shù)判等。舉個例子8 ÷ (3 - 8/3)其中8/3 2.666...計算結(jié)果正好等于24但在浮點(diǎn)數(shù)運(yùn)算里可能是23.999999999996或者24.000000000002。如果直接判斷result 24很可能得到False導(dǎo)致漏解。解決辦法有兩個用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ù)徹底杜絕精度問題。另一個隱藏的好處是Fraction會自動約分中間結(jié)果不會出現(xiàn)分?jǐn)?shù)越滾越大導(dǎo)致計算緩慢的情況當(dāng)然在這個題目里本來就不大。求值部分的完整實(shí)現(xiàn)如下from fractions import Fraction def eval_rpn(nums, ops): nums: 4個數(shù)字對應(yīng)RPN中的操作數(shù)順序 ops: 3個運(yùn)算符對應(yīng)RPN中的運(yùn)算符順序 返回Fraction類型結(jié)果如果不能計算(除零)返回None stack [] num_idx 0 op_idx 0 # 把數(shù)字先按順序轉(zhuǎn)成Fraction fracs [Fraction(x) for x in nums] # 用一個指針遍歷RPN序列 # RPN序列長度固定為74個數(shù)字 3個運(yùn)算符 for i in range(7): # 前4個位置是數(shù)字后3個位置是運(yùn)算符這個假設(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]這里有個值得注意的細(xì)節(jié)RPN求值時運(yùn)算符彈出操作數(shù)的順序是后進(jìn)的先彈出。也就是說對于減法a - b棧頂?shù)谝粋€彈出的是b第二個是a計算時應(yīng)該是a - b而不是b - a。很多初學(xué)者在這里寫反導(dǎo)致減法順序錯誤、結(jié)果全對不上。除法同理。3.3 輸出人眼可讀的中綴表達(dá)式RPN適合計算但直接輸出8 3 8/3 3 ÷ - ÷給用戶看閱讀成本太高。所以要把RPN轉(zhuǎn)回帶括號的中綴表達(dá)式。轉(zhuǎn)換思路是給每個操作數(shù)包一層“括號保護(hù)”每次運(yùn)算時把兩個子表達(dá)式拼接成(左表達(dá)式 運(yùn)算符 右表達(dá)式)。由于每個子運(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]這個邏輯簡單粗暴但輸出結(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] # 注意這里每個模板的“運(yùn)算符順序”要和RPN計算時的出棧順序匹配 # 實(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á)方式雖然計算快但對讀者不友好——太抽象容易出錯。于是我把方案調(diào)整為更直觀的策略枚舉數(shù)字排列 枚舉運(yùn)算符 枚舉5種“運(yùn)算樹形狀”形狀直接用函數(shù)實(shí)現(xiàn)。下面這個版本是最終采用的求解器運(yùn)算樹形狀摸得著、看得懂from itertools import permutations, product from fractions import Fraction def apply_op(a, b, op): 應(yīng)用單個運(yùn)算符返回Fraction或None除零時 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個Fraction ops: 3個運(yùn)算符 返回所有可能的結(jié)果列表最多5個 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á)式不保證和計算時的分步完全一致 但能保證數(shù)學(xué)上等價。為了精確展示我在更完整的版本里會記錄計算路徑。 # 簡化版直接返回一個估算的表達(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} 5glq3a94y if __name__ __main__: cards [8, 3, 8, 3] sols solve_24(cards) print(f共找到 {len(sols)} 個解) for s in sols: print(s)這份代碼的問題在于build_expr不考慮具體是哪種形狀命中的導(dǎo)致輸出的表達(dá)式有時和實(shí)際計算路徑不一致。下面給出一個“記錄路徑”的改進(jìn)版可以精確輸出命中解對應(yīng)的表達(dá)式。3.5 記錄計算路徑輸出準(zhǔn)確表達(dá)式我在實(shí)戰(zhàn)中更傾向于讓計算函數(shù)同時返回結(jié)果和計算表達(dá)式而不是事后靠猜。做法是給apply_op增加一個字符串拼接的配套函數(shù)def apply_op_expr(a, b, op, expr_a, expr_b): 返回計算后的值以及對應(yīng)的表達(dá)式字符串 val apply_op(a, b, op) if val is None: return None, None return val, f({expr_a} {op} {expr_b})然后對每個形狀單獨(dú)寫一個函數(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每個形狀寫一個函數(shù)總共5個邏輯重復(fù)但清晰壞處是代碼長好處是出錯了很容易定位。我在正式實(shí)現(xiàn)時就是5個函數(shù)“復(fù)制粘貼改順序”反而比抽象模板好維護(hù)。完整版代碼放在個人倉庫里這里展示形狀1和形狀5剩下3個同理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, f5glq3a94y) 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}, f5glq3a94y) 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ù)字排列、運(yùn)算符組合、5個形狀函數(shù)只要結(jié)果等于24直接記錄表達(dá)式字符串。這樣做表達(dá)式一定對應(yīng)真實(shí)計算路徑不會出現(xiàn)數(shù)學(xué)等價但結(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ì)是同一個解只是括號寫法不同。(8 × (3 (3 - 8)))和((3 (3 - 8)) × 8)互為交換律數(shù)字順序不同但結(jié)構(gòu)完全等價。(8 ÷ (3 - 8/3))和(8 ÷ (3 - 2.666..))中后者的8/3會先算再到3里減屬于同一路徑不同寫法。如果目標(biāo)是“求解”重復(fù)解不影響功能如果目標(biāo)是“給出一份優(yōu)雅的解列表”就必須去重。去重策略可以從兩個層面做字符串層面去重對外層括號和多余括號做歸一化比如全角半角統(tǒng)一、去掉最外層括號。結(jié)構(gòu)層面去重記錄每個解的計算樹結(jié)構(gòu)將等價樹合并。這個實(shí)現(xiàn)較重適合大規(guī)模搜索。我在工具腳本里用的是輕量方案——把表達(dá)式字符串中的所有等號、空格去掉統(tǒng)一成緊湊形式再用集合去重。順手把((ab)c)和(a(bc))這類結(jié)合律導(dǎo)致的重復(fù)也合并掉因?yàn)檫@類重復(fù)在數(shù)學(xué)上完全等價用戶看多了會煩。4.2 耗時實(shí)測用[1, 2, 3, 4]測試完整枚舉7680種組合Python跑完大約需要純枚舉RPN計算約30毫秒。增加表達(dá)式字符串構(gòu)造約80毫秒。不去重直接打印解的數(shù)量大約在110條左右。對于一個簡單腳本來說完全夠用。就算你想一次性求解所有可能的4張牌組合13^4 28561種總耗時也在幾分鐘級別屬于可以接受的批量任務(wù)范圍。4.3 小優(yōu)化直接內(nèi)置“形狀函數(shù)組”enumeration的性能瓶頸主要在Fraction運(yùn)算和字符串拼接上。如果只是判斷“有沒有解”可以放棄字符串構(gòu)造只做數(shù)值計算同時把5個形狀函數(shù)合并成一個循環(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)致程序崩潰這個最容易踩。枚舉過程中會頻繁出現(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計算并且用判斷會漏掉不少解。比如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]時permutations會把兩張8互換的情況當(dāng)成不同排列于是同一個解出現(xiàn)多次。很多人在這一步誤以為自己的枚舉邏輯有問題其實(shí)只是排列本身包含了重復(fù)元素。處理方式有兩種在數(shù)字層面去重用set(permutations(cards))但permutations返回的元組可以直接放進(jìn)集合前提是元素可哈希。在結(jié)果層面去重收集所有表達(dá)式字符串后用set()去重。我推薦兩者都做先數(shù)字去重減少計算量再表達(dá)式去重保證輸出干凈。5.4 表達(dá)式括號過多影響閱讀rpn_to_infix或形狀拼接法生成的表達(dá)式往往帶滿括號比如((8 ÷ (3 - (8 ÷ 3))))。閱讀還行但一旦輸出十幾條就有點(diǎn)累。可以做一個括號清洗函數(shù)去掉最外層括號、對(ab)c這類“冗余括號”做檢測刪除。注意清洗時不能改變運(yùn)算優(yōu)先級所以要用一個簡單表達(dá)式求值器驗(yàn)證清洗前后結(jié)果一致。我這里偷了個懶直接不去括號保持原樣避免清洗邏輯引入新bug。5.5 無解的情況怎么提示[1, 1, 1, 1]這種組合無解。代碼返回空列表即可。但排查時需要確認(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)不少。順著這個項目往下走可以做幾個有意思的擴(kuò)展擴(kuò)展一求解全部4張牌組合遍歷13^4種組合統(tǒng)計可解率。我試過跑全量結(jié)果可以畫成一張“難度分布圖”——有些數(shù)字組合有幾十個解有些只有一兩個解還有些完全無解。這個過程對理解“數(shù)字空間中的表達(dá)式覆蓋范圍”挺有幫助。擴(kuò)展二生成24點(diǎn)題目供游戲使用反向思考如果我想生成一個“保證有解的24點(diǎn)題目”可以先枚舉所有組合挑出語句結(jié)構(gòu)優(yōu)雅、解法數(shù)適中的組合比如1~5個解的作為題庫。輸出成cards - expr的映射文件存成JSON可以直接作為小游戲的后端數(shù)據(jù)。擴(kuò)展三多解匯總與解法排序?qū)γ總€有解組合按“解法的復(fù)雜度”排序比如優(yōu)先展示只用加減、或只用乘除的簡潔解法把復(fù)雜的長表達(dá)式排后面。這需要定義復(fù)雜度分?jǐn)?shù)最簡單的做法是統(tǒng)計表達(dá)式中運(yùn)算符的種類數(shù)——種類越少越“優(yōu)雅”。擴(kuò)展四可視化表達(dá)式樹把每個解對應(yīng)的運(yùn)算樹畫出來配合matplotlib或graphviz可以讓用戶直觀看到哪兩個數(shù)先算、哪兩個再算。該擴(kuò)展對教學(xué)場景特別有用能幫助新手理解運(yùn)算順序和括號的作用。7. 寫代碼時踩過的兩個坑最后分享兩個實(shí)際操作中印象深刻的坑。第一個坑是減法順序。RPN求值里先彈棧的是右操作數(shù)很多初版代碼在apply_op直接寫成a - b但變量名指代不清。我曾經(jīng)在一個版本里把a(bǔ)、b搞反導(dǎo)致[1, 2, 3, 4]這種簡單輸入都解不出來。排查方法很簡單打印中間每一步的棧內(nèi)容和計算結(jié)果肉眼對照一遍就知道哪一步算反了。寫算法題不要怕用print調(diào)試小邏輯越復(fù)雜越需要即時反饋。第二個坑是“形狀函數(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)了前三種形狀這個解就永遠(yuǎn)找不到。把5個形狀函數(shù)都寫好之后我建議跑一個“全組合自檢”——遍歷1到13的所有四元組確保每種組合都能找到解或有明確無解的結(jié)論防止形狀遺漏。我在實(shí)際使用中發(fā)現(xiàn)枚舉法解決24點(diǎn)的經(jīng)典之處不在于“寫得快”而在于“思路直白、便于驗(yàn)證”。沒有復(fù)雜的貪心策略沒有狀態(tài)轉(zhuǎn)移方程就是老老實(shí)實(shí)列所有可能、算所有結(jié)果。對于算法入門的同學(xué)來說這個題目麻雀雖小五臟俱全有排列組合、有表達(dá)式解析、有精度處理、有去重邏輯是一道性價比極高的練手題。之后如果再做類似的窮舉類題目這套“枚舉維度劃分、中間結(jié)果緩存、路徑記錄”的套路可以反復(fù)套用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
2017av无码免费无线播| 青青草原伊人网| 波多野结衣一级视频| 97超碰影音| 五月婷婷hd| 国产精品视频白浆免费| 最新av中文字幕高清| 久久一区二区加油站| 夜夜嗨AV一区天天| 国产亚洲色婷婷久久99精品91 - 百度| 亚洲欧美日产国产91毛片| 久热大香蕉网站| 爽爽歪在线视频| 亚洲av影院在线观看| 91美女网站| 密臀国产在线| 91欧美丨精品丨入口| 丁香六月婷| 国产精品激情久久久久久久| 一中国女人毛片水真多| 国产精品农村妇女| 亚洲 欧美 第一页 | 中文字幕诱惑制服人妻丝袜美丝袜美| 国产怡红院| 99视频只有精品| 加勒比在线观看一区二区| 少妇久久久| 麻豆精品.欧美精品.日韩精品.| 欧美色图小说综合| 欧美v亚洲v综合v国产v妖精| 一区二区三| 天天射日日干| 91亚洲欧洲| 色与欲影视天天看综合网| 白丝jkav| 欧美一区二区成人一卡| 69人妻精品丰满熟女区| 人妻五十路在线| 999九九精品| 久操操| 欧美综合第一| 久日综合网| 偷拍综合亚洲| 日本久久超碰| 亚洲无码偷拍| 在线播放免费av福利片| 一区二区三区四区免费视频| 最新日韩黄片| 鲁鲁色综合网| 亚洲激情色片 | 大香网伊人久久综合网eew| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 丰满人妻av一区二区三区| 婷婷丁香九月| 亚洲Av无码成人精品国产| 色乱二区| 91美女视屏| 97舔舔| 亚洲一区二区三区麻豆传媒| 日本孕妇孕交| 香蕉视频精品亚洲一区二区三区在线播| 91国产伊人大香蕉| 大香蕉欧美| 色欲久久久久综合网| 性爱网站一区二区| 3d成人精品一区二区| 国产精品探花视频| 婷婷三区| 色淫网站优优视频| 精品国产乱码| 国产激情综合| 九九热五区| 男人天堂最新手机版在线青青草| 尤物av网站免费在线播放| 亚洲AV噜噜狠狠网址蜜桃动漫| 久草网站免费在线观看| AV 少妇 人妻 偷拍| 一区二区精品更新提醒| AV女资源| 色婷婷久久| 国产精品国产自产拍高清AV| 男人的天堂久久| 69少妇一区二区| www.99视频| 青青草十区九区爱夜| 大香蕉性欧美| 秋霞久久亚洲精品成人| 九九成人精品| AAAA级日本片免费视频| 天天综合日韩网| 日韩久草| 福利色色| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 99999亚洲| 欧美一区二区亚洲天堂| 日韩精品操少妇| 大香蕉狠狠爱| 最近的最新的中文字幕视频| 大香蕉www.超碰| 澳门黄片一香蕉视频| 加勒比在线观看一区二区| 韩国黄色片精品久久久 | 日韩99神马视频播放片在线播放| 色香欲天天天天综合色| 欧美日韩国产中文精品字幕自在自线 | 99热这里只有精| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | a男人的天堂久久一级A毛片 | 亚洲性高潮| 国产一区二区三区久久久精品| 日韩AV电影网站| 一本大道青青| 一区二区 韩日AV| 婷婷国产精品一区二区| 亚洲四虎熟女精品| 亚洲人精品午夜不卡| 日韩在线欧美精品一区二区| av 模特一区了| 欧美片第一页| 亚洲一区二区三区麻豆传媒| 91操操操操| 国产伊人自拍| 欧美精品久久96人妻无码| 色五月亚洲| 久久二| 巨爆乳肉感一区二区三区竹菊影视| 99re69| 亚洲男人久久综合天堂| 你草精品在线视频| 伊人久久综合精品欧美| 天天插天天操天天摸天天射天天看| 人人做,人人操,人人摸| 一二视频神马久久传媒| 亚洲操人| 91久久青青草原精品| 欧洲综合视频| 亚洲小电影免费涩涩成人在线高清| 刺激性视频黄页| www熟女乱伦com| 亚洲欧洲视频小说在线观看| av在线播放国产一区| 婷婷丁香五月综合| 欧美天天射| 性爱动态120秒| 大香蕉欧美| 熟女人妻av在线资源,黄色的资源 粉嫩国产精品久久粉嫩 | 青青操在线视频| 亚洲乱熟女一区二区三区大香蕉| 国产精品农村妇女| 狠狠 91| 一起草三级AV电影在线观看 | 精品国产久久乱码| 色爱综合网| 精品国产av一区二区三区四区入口| 色综合美国| 极品欧美一区二区三区| 欧美色图自拍| 欧美 熟女 日韩| 欧美极度丰满熟妇hd| Julia Annxxxxx| 丁香五月电影| 免费超碰97在线观看| 插B在线观看| 日本 欧美 亚中文字幕| 福利操逼| 亚洲欧美在线丝袜| 操逼内射干逼白丝91| 色天使亚洲综合在线观看| 天天爱综合网| 精品人妻二区三区| 黄色片大香蕉| 天天影视色香欲综合网小说| 麻豆黄站| 五月天伊人| 丁香六月东京热| 美女黄网| 精品人妻一二三四区视频| 再深点灬舒服灬太大了添视频| 91 丝袜在线播放| 亚洲视频二区 | 台湾佬中文娱乐自偷自拍| 亚洲黄色a级片| 中文字幕欧美日韩三级| 日本最新1区2区3区| www九九热| 免费啪啪av| 综合亚洲欧美| 国产精品一级二级在线| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| www.狠狠操| 蜜乳Av成人片网站| 久久亚洲AV无码白度| 日本黄色XXX| 人人爽夜夜操| 一区二区三区精品黑丝白丝酒店对鸡| 国产日本久久免费精品| 另类TS人妖一区二区三区| 91老司机精品| 久久91| nuu12国产麻豆精品| 超碰久久性爱| 一级久久久久久久久久久 | 超碰人人色| 亚洲图片激情综合另类| 欧美日韩中文视频播放| 一本大道久| 欧美色997| 超碰天天久久79| 欧美成人精品A片免费一区99| 做爱A级亚欧| www.av家庭乱伦| 欧美综合色,www| 91n免费处女| 熟女天天干| 啊好大好舒服| 日韩av熟女一区二区三区成人| 日本三级中国三级99人妇网站| 日本丝袜人妻内射| 久草免费福利在线播放| 国产美女高潮叫床视频| 日本欧美国内在线| 性爱乱伦网址| 1956日韩精品| 午夜天堂精品久久| 91偷拍欧美亚洲| 97日视频| 亚洲熟女少妇免费视频| 国产伊人精品在线| 91国模| 日韩性爱长视频免费| 韩国三级色呦呦| 国产又黄又粗又猛大片| 日逼逼免费看| 丁香六月婷婷久久综合| 日韩有码免费视频| 国产婷婷一区| 欧美人妻熟女在线| 91综合网站| 久久久久亚洲熟妇熟女| 午夜精品久久久久久久99蜜桃一| 青娱乐日韩无码| 五月天伊人| 男人天堂久久精品| 国产乱婷婷精品二区三区| 97二区四区| 欧美性爱一内片一区二区三区| 人妻精品综合中文字幕在线 | 亚洲综合另类| 淫荡熟女乱伦网| 女人被添高潮免费视频| 999狠狠综合| 国产美脚女优尤物在线观看| 91 国产丝袜在线播放-百度| 激情综合 婷婷五月 红杏| 神马麻豆福利院| 欧洲特黄毛片免费看欧洲毛片| av三级电影在线播放| 色天使亚洲综合在线观看| 欧洲一级性爱视频在线观看| 操穴国产| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 国产AV天美传媒一区二区三区 | 欧美日韩中文字幕不卡| 翔田千里A片一区二区| 久久男人精品| 最新亚洲风情电影| 久久99干一本高清| 国产精品成人久久一区二区三区| 免费综合亚洲中文| 日韩钢筋无码高清啾啾啾| 亚洲男人在线观看天堂| av天堂天堂av日韩| 亚洲 图片 综合91| 国模久久在线| 日韩免费中文字幕视频| xxxx网站亚洲精品| 97人人模人人爽人人| 1024久久高清视频| 熟妇人妻精品一区二区| 亚洲 日韩 丝袜 熟女 变态| 无码99| 色香欲综合| 久久‘黄片视频| 亚洲色欲一区二区三区| 亚洲Av诱惑| 强奸乱伦麻豆| 中出789在线视频| 又粗又长又大国产不卡| 天天综合色电影| 大香蕉日韩欧美| 自拍偷拍国产欧美日韩韩| 日本大片日本一区二区免费高清| 色香网| 亚一综合久久久久久久久久| 97色97好| 久热精品在线| 女人的久久久| 午夜经典| 精品人妻美妇91job| 乱欲性色| 欧美 日韩 亚洲 春色| 97视频观看| 欧美激情精品| 青青草原人妻| 九九综合九九综合| 欧美丝袜激情| 一线黄色免费性爱片| 91美乳| 欧美性爱精品七区| 第四色色综合91| 国产深夜福利| 一牛一区二区三区久久| 高清国产性猛交xxxx乱大交| 精品乱子一区二区三区99| 欧美大片91| 这里是精品| 国产内射爽爽大片| 91 刺激在线| 五十路熟女人妻一区二区在线观看 | 婷婷AV一区二区三区| 婷婷香网站| 一区二区三区黄片免费观看| 午夜精品久久999热蜜桃介男人用| 国产精品麻豆成人av| 婷婷激情一区二区三区俺也去| 岛国精品视频在线观看| 啊啊啊啊操死我| 亚洲性爱高潮影院| 日韩无码视频黄色| 色男人色天堂东京热| 天天谢天天干| 天天碰久久入| 精品久久久av| 亚洲天堂 视频你懂的| 97色欧洲| 有码人妻系列| 日韩亚洲Av人人夜夜澡人人爽| 精品无码产区一区二| 婷婷亚洲天堂| 精品人成视频在线观看| 欧美高清性猛交| 国产精品国产自产高清AV| 久久精品成人一区二区三区蜜臀| 五月天色色网站| 亚洲超碰综合网| 欧美黑人猛交春色影视大全| 911av网站免费观看| 久久精品一区一起草| 嗯嗯啊在线视频| 亚洲好看强奸乱伦| 国产丁香精品露脸视频| 国产高清1234区| 思思热免费视频观看| 超碰97丝袜| 91成人社区| 亚洲天堂99| 中日韩免费看男女操逼大全| 北野未奈加勒比av| 黄色大片一区二区密桃丝袜| 狠狠色狠狠色狠狠五月| 久久久久久久97| 国产熟女精品区| 碰碰在线视频| 国产区91柔拿会所技师| 一级@啪啪视频| 加勒比aⅴ| 婷婷另类小说| 96免费视频在线| 久9视频| 小视频国产| 超碰在线91| 中文字幕免费看| 久久久久久久久久久人妻| 久久精品店| 一二三区操逼国产91| 国产精品一二三在线看| 蜜臀久久99精品久久久久久无删减 | 无码高清专| 超碰欧美| 免费精品无码一级毛片牛牛影视 | 日本三级韩三级99久久| 久久香蕉综合一本到3atv| 欧洲视频在线| 久久78| 亚洲综合色图欧美| 国产AV线| 亚洲天堂少妇| 91美女国产在线| 男人网站婷婷| 久久一区,青青青青草视频在线播放| 影音先锋国产精品| 大香蕉一线视频| 国产性久久久| 精品成人亚洲午夜电影| 国产精品探花色| heyZO天然素人无码AⅤ专区| 内射夫妻三片| 国产精品福利资源在线尤物| 曰韩人妻中文字幕在线| 亚洲 欧美 日韩 国产一区二区| 日韩情色一区二区| 人妻少妇精品视频一区二区三区| 香蕉视频欧美一卡二卡| 精品人妻一区二区三区在| 欧美色涩| 91视频综合网| 无码久久国产| 太久视频| 日逼国产| 亚洲av乱伦色图网站| 日本欧美国内在线| 一区二区三区在线资源| 九九玖玖精品| 亚洲美女 晚间男人天堂 | 夜夜嗨av午夜成人| 欧美日韩大陆黑人少妇99| 超碰碰97| 欧美天天在线| 日本大香蕉综合网| 中文日本免费高清| 大香蕉乱伦视频网| 亚洲精品一区中文字幕乱码| 婷婷五月天久久精品视频一区二区三区 | 看一级特黄a大一片| 国产强奸超碰AV| 亚洲另类综合欧美| 97日视频| 久久系列| 国产毛片在线| 国产欧美美女免费观看视频| 韩国国产欧美情侣视频在线| 久久久555| 97精品网| 成人性爱高清视频免费看| 亚洲色诱惑| 欧美精品成人亚洲| 久久99草| 美女被啪到深处抽搐视频| av网站在线观看了| 五月开心网| 韩国女主播青草在线| 亚洲精品久久久久久| 午夜男人的天堂| 欧美国产伊人久久久久| 少妇同性| 清纯唯美第一页| 国产精品一二三区18| 无码精品一区二区三区潘金莲| 99色视频| 蜜臀久久99精品| 骚货操死你| 久操网视频| 成人资源中文字幕在线观看天天 | 午夜亚洲国产理论秋霞| 懂色AV一区二区三区| 亚洲黄色网址| 波多野结衣之双飞调教在线播放| 国产高清MV操逼视频| 人人摸人人干| 无码78| 爆操无码| 91少妇通奸网站| 精品亚洲一区在线观看| 亚州情色j区| 日韩91网| 最新日产中文在线麻豆| 欧美色色人| 国产主播福利| 久久最新免费视频23| 男人久久天堂| 97人人操人人干| 99热8| 高潮的A片激情扒开一区| 久9爱经典视频| 亚洲色色探花| 岛国艾薇凹凸视频天堂| 久操在97| 8x福利精品第一福利视频导航| 天美传媒国产原创中文字幕亚洲欧美另类 | 老熟女天天操| 自拍大香蕉乱插| 91激情综合| 91精品久久久| 欧美天堂超碰97| 377p欧洲日本亚洲大胆| 日本999精品| 人妻丰满熟妇一区二区三| 国精品一区二区三| 欧美片第一页| 激情小说亚洲图片| 男男H黄动漫啪啪无遮挡网站| 亚洲精品蜜桃久久久久久久| 日韩人妻播放| 天天大干大香蕉| 国产吞精a级片激情电影| 一二区在线观看视频| 久久婷婷综合国际产色怕| 操老熟女AV| 俄罗斯一区二区视频在线观看| 九九亚洲精品| av网页一区二区三区| 亚洲欧洲第二视频在线观看色图| 偷拍自拍在线视频观看| 欧美人妻色| 亚洲一区二区三区欧美日韩| 99999久久精| 婷婷久久五月天| 激情综合网激情综合| 啊啊啊好湿久久| 青青伊人这里只有精品| 精品美女人人干| www.91色| 日本性感人妻91| 久久国模av| 神马久久久久久伦理片| 国产美女91| 理论久久婷婷网 8| 翔田千里无码中出中文字幕| 欧美体内射精| 嗯嗯啊在线视频| 乱伦av麻豆| 婷婷激情丁香| 久久久久久久久久久久黄色| 日本在线视频导航| 亚洲高清视频在线免费观看| 春色综合免费| 91久久午夜无码鲁丝片久久人妻| 国产欧美岛国精品一区| 老熟女综合| 综合97亚洲| 99精品在线播放| 亚洲国产婷婷在线播放| 欧美天堂在线| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 亚洲码在线中文在线观看| 亚州色阁| 五月天色图| 开心五月天激情网| 熟女精品va中文字幕| 久久97超碰| 后入式视频国产自| 91在线综合网| 久99视频| 色青青久久影视| 亚洲av性爱电影| AV天堂因数| 亚欧美综合网。| 精品91摸| 欧美黑人性猛交91| 九九色热| 99热这里是精品| 精品一区二区成人| 91在线精品一区二区三区| 久草综合网| 狠操91,com| 人人操人人射人人干| www.操| 中文字幕啊啊啊在线观看视频| 中文字幕一区二区韩| 乱性AV| 小说区 图片区色 综合区| 男生通女生屁股| 人妻大香蕉| 久啪| 一直超碰| 97超碰无码网| 目产99999久久999| 精品国产99| 欧美超碰96| 台湾佬中文娱乐自偷自拍| 丝袜熟女2P| 免费观看有码高清视频| 久热这里| 亚洲天堂中文字幕无码男同| 精品精品精品| www狠狠| 蜜桃视频精品一区二区| 日本天天操| 丁香五月天社区| 五月天色图影视| 97国产精品国| 精产国品一区二三产品| 精品国产72| 午夜精品久久久久| 91黑丝美女| 美女91av| 91N综合网| 美女91AV| 国产中出内射一区二区| 97超碰人妻| 日本操逼视频不卡直接放| 国产日韩在线播放av| 成人麻豆av电影网站| 极品欧美一区二区三区| 操逼网免费无码视频| 99热最新| 久久a久久| 青青草日本中文字幕| 综合大香蕉美。| 男人的天堂VA| 日韩免费在线观看不卡| 久久人人爽爽人人爽人人片αV| 成人a大片在线观看| 色色色网站| 久久超碰、| 亚洲色图第四色| 国语精品av| 中文操逼字幕| 性爱1区| 亚洲成人一二三区| 日韩亚洲97| 中文字幕三四五区| 亚洲天堂一区二区久久| 久久久草成人网站久久久草成人久久久草久久久 | 91原创在线观看| 老熟妇综合| 91精品国| 五十路六十路素人熟女| www超碰| 试看60秒| 手机看片91人妻| 国产午夜无码片在线观看影视| 婷婷爱五月| 动漫av中文| 亚洲啪啪视频免费| 婷婷精品视频| 加勒比海成人视频网| 97国产精品一区二区传媒公司| 欧美亚洲| 亚洲影视综合网| 丰满熟女人妻一区二区三五十一路| 久久专区| 九九色热| 学生妹天天看| 中文字幕精品一区二| 五月丁香综合网| 劲爆欧美人妖三区91| 国产一区二区二区按摩精品啪视频| 人人天天干干| 91高潮喷水美女| 九九九精品成人免费视频小说| 色狠狠综合| 欧美综合自拍亚洲综合图| 伊人操| 欧美一级色| 校园春色美腿丝袜| 无码抄逼网| 日韩精品三级片长长久久| 中文字幕国产在线天堂| 精品人妻1237| 亚洲天堂一区| 日韩三级久久久| 精品天堂| 综合激情婷婷| 麻豆精品一区二区三区四区免费观看| 国产精品一区二区黄片| 激情文学小说一区二区 | 99re视频在线观看这里只有精品| 97 国产精品| 欧美日综合| 亚州,欧美在线| 国模精品娜娜一二三区| 国产日韩中文字幕欧美| 9l视频自拍9l九色成人| 亚洲中文字幕久久无码精品| 人人天天干干| 啊啊在线| 欧美专区日本专区| 日韩欧视频| 91丝袜美女国产| 一区二区影视| 日韩情色视频| 波多野42部无码喷潮在线观看| 欧美五区| 曰本人妻人人澡人人夹| 夜夜夜夜爽| www.色婷婷| 日日爱99| 蜜桃视频一区二区三区在线观看| 日韩精品一二三四| 91蜜桃传媒精品久久久一区二区| 免费视频无码| 竹菊一区二区三区AV线| 五月丁香影院| 无码粉嫩白虎一线天b区| 丁香五月天视频| 99人妻| 日韩97视频| www.久久| 国产成人超碰在线| 伊人色综合欧美| 狠狠色婷婷| 日产操逼| 欧美青青草视频| 国产刺激视频| 亚洲一区二区三区中文字幕| 另类图片五月天| 人妻碰碰碰碰碰碰| 精品人妻中文字幕4399| 啊啊啊草死我| 久久久99999久网站| 婷婷综合五月| 可以免费看黄片的视频| 嗯嗯啊啊啊好爽| 丝袜性亚洲| 91狼人| 国产精品久久久久久亚洲色欲| 乱操9999| 2025亚洲男人天堂| 国产精品久久久鸭无码的功能| 九色黄站| 精品人妻少妇| 久啪| 欧美日韩m| 少妇高潮特黄A片| 黑人免费福利视频| 99超碰网| 综合色拍| 北条麻妃99精品青青久久| 国产粉嫩出水在线播放| 久久精品福利影院| 国产精品视屏| 伊人在线大香蕉二。| 爽爽爽免费视频| 97在线视频观看| 精品偷拍13p欧美dodk视频| 欧美97在线欧| 天天综合色图| 人人摸人人舔一区二区| 超碰碰97| 99丝袜福利在线播放| 欧美日韩国内不卡| 天天综合亚洲综合| 97精| 人妻少妇精品久久久久久| 超碰97久久国| 天天影视之亚洲综合网| 一级黄碟在线观看| 97精品一二区| 色婷五月天| 4399成人黄A片| 911av网站免费观看| 操逼无码操逼| 乱性AV| 久久久9999| 五月婷亚洲精品天堂| 婷婷丁香人妻 | 国产日韩精品suv| 国产综合久久久麻桃个| 9 9无尺码天堂网| 蜜臀久久在线视频| 伊人青青一区成人视频在线观看区 | 五月天玖玖资源站| 老司机射| 91天堂色男人的天堂| 天天搞在线综合网| 国产女人极品高潮毛片| www.av在线视频| 成人三级片无码| 国产a级午夜毛片| 性爱乱伦网址| 妺妺跟我一起洗澡没忍住| 99热色精品| 婷婷五月天伊人| 久久久草成人网站久久久草成人久久久草久久久 | 黑人天8A∨高清网站| 欧美熟女妇同| 亚洲高清少妇| 欧美日韩国产色五月综合在线| 欧美色天堂网在线视频| 国产suv精品一区二区四| 日本免费一区二| 亚洲棕合电彰| 欧美成人精品一区二区男人蜜臀| 日韩综合色网| 久久东京热久久| 欧美人妖内射| 日韩无码视频黄色| 日本不卡高清视频| 91三级理论片播放器| 亚洲综合在线视频| 久久久久久中文字幕中文字幕最新| 久热久一区二区三区| 亚洲综合99999| 九九精品网| 日本一级特级毛片视频| 蜜乳av一区二区| 男人的天堂啪啪啪啪啪蜜桃不卡| 国内精品999| 超碰综合色| 日日干日日摸| 欧美性生活免费网| 国产亚洲精品自在线亚洲情侣| 人妻激情另类| 麻豆区久久久久亚| 啊啊啊草死我| 国产高清在线观看欧美| 在线看免费无码AV天堂的| 欧美日本久久精品一区| 激情小说亚洲视频| 国产深夜福利| 乱老女人一区二区视频| 夜夜操av亚洲一区二区| 色踪合AV| 91啦人妻| 极品色社| 色综合1991| 搡老女人911熟妇老熟女| 久操大香蕉| 超碰精品| 久久国产乱子伦精品免费女,网站| 老司机深夜影院18未满| 91精品国产综合久久久蜜臀| 久久久久斤小| 欧美精品三级黄片| 992这里有精品| 少妇人妻激情四射| 波多野结衣之双飞调教在线播放| 免费黄色片子| 亚洲精品1区| 久久久久久精| 最新国产亚洲精品精品国产亚洲综合| 久久神马影院| 看全色黄大色大片免费视频| 国模少妇一区二区三区| 黄色十八禁| 麻豆国产精品午夜视频| 熟妇熟女视频一区二区三区| 国产97在线播放| 青娱乐欧美激情一区二区| 男人的天堂在线有码| 99国产精品久久久久久久成人热 | 性爱视频无打码在线观看| 欧美天天插| 国产嫩草精品A88AV| 凸凹视频在线观看| 日日夜夜模| 国产丝袜美女在线一区| 精品人妻夜夜草| 91人人操| 丝袜六区| 久久成年片色大黄全免费网站| 操人91| 亚洲激情深爱文学小说网站| 中文字幕高清精品一区| 久插不卡| 国产狂喷潮在线精品| 久久久久无码| 欧美岛国精品在线观看| 色诱avtt| 黑人美精品 A片| 久草在| 高清无码久操视频| 色 亚洲 91| 久久久久成人亚洲国产| 美女91色黄18| 九九久久精品| 东北熟女91| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 亚洲aw毛茸茸在线| 欧美一级做a爰片免费视频| 91肉片| 一级AAA片一区二区三区| 欧美丝袜美女电影一二三四区| 亚洲色图片区| 亚洲乱熟女一区二区三区大香蕉| 中文字幕二区日韩天堂| 综合激情五月天| 高凊专区人人操| 蜜桃传媒一区二区亚洲| 情色av电影| 色91综合网| 久久超碰亚洲人| 2000亚洲男人天堂| 久久久久久久久久久久色网| 手机看片1025| 99∨VTV| 韩国一级做a久久久久| 校园春色综合| 波多野结衣之双飞调教在线播放 | 成人亚欧免费视频| 青青草华人在线欧美在线| 久久草草欧美精品| 26uuu久久| 成人黄页| 亚洲情色91| 久久成人国产精品| 亚洲九九视频在线观看| 性欧美另类高清| 东京热视频网| 黄久久| 伊人青青一区成人视频在线观看区| 搡老女人老91妇女老熟女| 日韩国产十八禁| 亚洲美女自拍偷拍视频| 成年男人的天堂| 国产精品欧美日韩久久| 我要色综合网| 美美91成人国产精品欧美精品久久久久久久 | 手机看片1024你懂的国产| 91天天综合在线观看| 在线性黄高清免费视频| 欧美日韩在线小说 | 神马久久久久久伦理片| 精品人妻一区二区三区免费视频| 99啪啪视频| 日日干日日| 韩国一级婬片A片无码天美| 久久精品六区| 亚洲污污网站| 九九热免费国产视频婷婷伊人| 国产探花精品在线| 久操91视频| 久久久无码精品人妻二区| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 人妻美腿丝袜日韩| 99999久久久久9国产精品| 欧美另类综合久久| 中文字幕精品免费一区二区| 97欧美日韩精品| 天天干天天中出av| 超碰人妻久久人妻中文97| 91丨九色丨43老版熟女| 亚洲小电影免费涩涩成人在线高清| 欧美的精品的视频| 狠狠躁日日躁夜夜躁A| 在线女人91| 国产精品天美传媒| 丁香婷婷大香蕉| 国产专区第一页| 精品国产91av一区二区三区| 97超碰久久| 男人的天堂VA| 国产一二三福利视频网| 亚洲中文字幕一区| 99只有精品| 欧美日韩国产人人| 亚洲综合小视频小说在线观看| 精品伊人久久久大香线蕉小说| 国产精品蜜乳AV| 蜜乳av一区二区| 91人妻在线视频| 97亚洲综合影院| 台湾佬中文娱乐网久久久久久久久久com | 色综合久| 一区二区三区免费岛国片| 久热影视| 欧美狠狠| 波多野结衣之双飞调教在线播放| 九九九九国产| 免费视频一二三区| 亚洲天堂久久久久久粉红视频| 东京太热男人的天堂久久久| 综合久欧洲| 欧美日韩一干二干| 亚洲国产精品久久久男人的天堂| 97视频900| 老女人老91妇女老热女| 久久99草| 97久久超碰亚洲| 色97欧美| 三四中文字幕| 一二三区操逼国产91| 偷拍亚洲| 老鸭窝成人免费毛片视频| 国产激情视频一区区三区| 91无码西班牙视频在线| 国产欧美日韩一区二区三区| 免费一级a毛片久久久久久鸭绿欲| 99老司机精品视频在线观看| 国产欧美日韩精品中文| 9999免费精彩视频| 99这里有精品视频| 97超碰热线| 欧美在线视频播放| 91精品久久久久| 淫荡网址| 亚洲AV秘无码一区..| 成年人性爱日韩| 成人精品在线| 99超级碰免费视频| 青青草日逼视频| 91九九九小逼| 国产激情在线| 曰韩人妻中文字幕在线| 人人玩人人添人人澡免费| 日亚韩精品视频二区三| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 超碰免费人妻人人| 2018天天日天天日| 九九aV| www四虎| 超碰在线97国产| 老熟女91视频| 国产黄色影片在线观看| 久久久爆乳翘臀一线天伦理视频| 日韩美女久久一区二区三区| 亚洲欧美日韩电影网站一区 | 日韩 欧美 另类 人妻| www九九热| 97 九色| 欧美丝袜中文字幕07在线| 久久精品噜噜噜成人看免欧美大片| 国产午夜精品理论片a大结局| 国产成人一级av88| 日韩伦理视频| 老鸭窝日丰县女人| 曰韩中文人妻视频| 九九色热| 九九九九九九成人| 天堂综合网| 国产av又色又爽又黄| 色蜜AV| 欧美丝袜91| 国产毛片久久久久久久| 91红杏| 中国熟妇| 久久高清欧美国产| 99在线视频播放| 99re视频这里只有精品| 欧美综合区| 久久超碰98| 精品午夜福利导航| 青青操青娱乐| 久久久久96| 国产一级作爱毛片| 一区,二区,三区网站| 欧美传媒一区| 久久黄色性爱视频| www.97在线| 91精片| 99久在线精品99re8| 丝袜无码a片| 97综合网| 亚洲天堂中文字幕无码男同| 在线视频资源| 色综合网1| 抽插一区二区视频| 岛国视频免费在线观看| 大香蕉在线免| 欧美一区二区福利在线| 女人的久久久| 东京热一区二区中文字幕| 久久亚洲婷婷| 91老妇女| www.久久爱| 亚洲激情深爱文学小说网站| 亚洲AV永久无码一区仙野| 91影视亚洲| JIZZJIZZ国产精品喷水| 久久久久久久六六| 天天插夜夜操| 美骚妇av高清在线| 色欲天天婬色婬香WWW夜色| 国产成人+综合亚洲+天堂| 懂色av中文字幕| 思思热免费视频观看| 诱惑人妻欧美一区在线播放| 88xx成人精品视频| 欧美大香蕉97| 久久激情婷婷| 伊人五月天| 中文字幕在线观| 国产馆极品诱惑| 色就色综合| 奸色色 男人天堂 天天射| 99精品无码| 91久久99久久91熟女精品| 国产精品白丝| 久久综合18p| 伊人一级免费黄片| 国产精品欧美激在线| 超碰色男人操熟女| 免费99精品国产自在在线| 国产成人精品日本亚洲语言| 国产熟女精品一区二区| 婷婷综合在线观看| 黄骗免费| 女人18精品一区二区三区| 强奸乱伦麻豆| 狼人狠干| 国产男女无套97| 91free福利| 国产99热| 色妇91| 97人人干人人操| 日本操逼无码| 日韩精品人妻中文字有码在线| 亚洲精品视频在线| 97超碰站| 亚洲日韩97| 日本有码久久| 婷婷丁香五月天综合东京热| 老熟女91| baiduhicn.com。| 人妻熟女一区在| 黄页网站免费高清在线观看| 97超碰色色| 亚洲男人的天堂在线看| 青草一区二区| 欧美亚洲91| 天堂8在线新版官网| 午夜福利精品| 操操操五月天婷婷丁香影院| 96免费视频在线| 久久久国产护士丝袜美腿一| 国产午夜在线观看| 色偷偷色偷偷欧美日韩| 欧洲欧美视频一区二区| 天天天堂影视日韩亚洲91| av无码精品久久久久| 67194无码不卡| 亚洲欧洲日韩中文字幕一区| 亚洲精品久久久久毛片A片拉屎| 久99视频| 国产精品宅男免费| 亚洲国产综合久久天堂| 色综合国产在线观看| 婷婷情色综合网| 岛国天天午夜影院传媒网| 无码不卡八戒| 亚洲成?V人片在线观看福利| 看看小穴| 欧美极度丰满熟妇hd| 国产精品噜噜噜日日日| 欧美视频第二页| 懂色AV一区二区三区| 性影在线视频| 亚洲欧洲无码bt精品合集| 97鸡把在线视频| 亚洲人精品午夜不卡| 欧美色图中文字幕| 伊人影院中文字幕| 久久精品亚洲成a人天堂| 午夜福利一区二区影院| 大逼色网站| 欧美最婬乱婬爆婬牲视频| 亚州久久9| 精久久久91| 久久人妻视频网| 日韩精品国产精品五码一区二区| 日韩乱中文| 国产精品国产亚洲区艳妇糸列| 肥臀熟女一区二区三区视频| 久久中久文96| 人妻无码一区二区三区久久99| 色欲人妻一区二区在线| 超碰97玖玖爱| 麻豆天美传媒在线视频天堂| 欧洲综合视频| 人妻精品综合中文字幕在线| 无码一区二区三区四区五区六区七区八区九区十区视频 | 精品国产乱码久久久影院| 亚洲男人天堂视频| 国产精品小视频一区二区三区| 狠狠久久亚洲欧美专区| 91狠| 青青操97| 大香蕉在线视频15|