2020春招机考汇总2:扑克牌打出最小次数、钢琴高昂旋律(拼接递增序列)
生活随笔
收集整理的這篇文章主要介紹了
2020春招机考汇总2:扑克牌打出最小次数、钢琴高昂旋律(拼接递增序列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目一:撲克牌打出最小次數
有一組撲克牌,面值為:1~10.
紙牌打出規則如下:
順子:5張連續牌(如12345)
連對:3連對(如112233)
對子:如22
單牌:如1
Python代碼示例如下:
import sysdef card_num(nums, k):if len(nums)<10 or k>9: return 0 # 紙牌種類少于10,判斷的牌面大于10終止if nums[k] == 0: return card_num(nums, k+1) # 該牌面沒有牌了,從下一牌面開始判斷min_num = float('inf')if k<=len(nums)-3 and nums[k]>=2 and nums[k+1]>=2 and nums[k+2]>=2: # 優先處理3連對nums[k] -= 2nums[k+1] -= 2nums[k+2] -= 2min_num = min(card_num(nums, k)+1, min_num)nums[k] += 2nums[k+1] += 2nums[k+2] += 2# 處理順子if k<=len(nums)-5 and nums[k] >=1 and nums[k+1] >= 1 and nums[k+2] >= 1 and nums[k+3] >= 1 and nums[k+4] >= 1:nums[k] -= 1nums[k + 1] -= 1nums[k + 2] -= 1nums[k + 3] -= 1nums[k + 4] -= 1min_num = min(card_num(nums, k)+1, min_num)nums[k] += 1nums[k + 1] += 1nums[k + 2] += 1nums[k + 3] += 1nums[k + 4] += 1# 處理對子if nums[k] >= 2:nums[k] -= 2min_num = min(card_num(nums, k) + 1, min_num)nums[k] += 2# 處理單牌if nums[k] >= 1:nums[k] -= 1min_num = min(card_num(nums, k) + 1, min_num)nums[k] += 1return min_numif __name__ == '__main__':nums = sys.stdin.readline().split() # 獲取輸入紙牌數目nums = [int(item) for item in nums] # 轉化為整型min_num = card_num(nums, 0) # 調用函數計算次數print(min_num)題目二:拼接遞增序列
題目描述:一段鋼琴旋律中每個字符都可以用一個小寫英文字母表示。當這段英文字母為非遞減的,稱這段旋律為高昂的,如aaa,bbb,cde。用n段高昂旋律拼接出一段盡可能長的高昂旋律,問最長多長。
輸入示例: 3 aaa bbb acd 輸出: 6Python 代碼示例:
import sysdef max_string(str_list, num): # 尋找最大值函數if num == 1: return len(str_list[0]) # 子序列只有一個,直接返回num_list = [0 for item in str_list] # 分別存儲以排序后各個子序列開始的新序列最大長度max_length = 0 # 記錄最大長度for i in range(num): # 遍歷子序列submax = 0for j in range(0, i): # 有點像動態規劃思想,解決子序列和之前序列構成新序列最大值if str_list[j][-1] <= str_list[i][0] and num_list[j]>=submax: submax = num_list[j]num_list[i] = submax + len(str_list[i]) # 更新以i為新序列尾的最大長度if num_list[i] > max_length: max_length = num_list[i] # 更新最大值return max_lengthif __name__ == '__main__':num = int(sys.stdin.readline()) # 子序列個數str_list = []for _ in range(num):str_list.append(sys.stdin.readline().strip()) # 存儲子序列str_list = sorted(str_list) # 為子序列排序,降低難度max_length = max_string(str_list, num) # 調用尋找最大值函數print(max_length)總結
以上是生活随笔為你收集整理的2020春招机考汇总2:扑克牌打出最小次数、钢琴高昂旋律(拼接递增序列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MIUI 14开发者预览版上线:小米13
- 下一篇: MIUI 14 开发者预览版上线,小米