日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2020春招机考汇总2:扑克牌打出最小次数、钢琴高昂旋律(拼接递增序列)

發(fā)布時間:2023/12/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020春招机考汇总2:扑克牌打出最小次数、钢琴高昂旋律(拼接递增序列) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目一:撲克牌打出最小次數(shù)

有一組撲克牌,面值為:1~10.
紙牌打出規(guī)則如下:
順子:5張連續(xù)牌(如12345)
連對:3連對(如112233)
對子:如22
單牌:如1

輸入面值的個數(shù)如:2 2 2 2 2 3 3 3 3 3 輸出:打完手上所有牌最小次數(shù)

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: # 優(yōu)先處理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() # 獲取輸入紙牌數(shù)目nums = [int(item) for item in nums] # 轉化為整型min_num = card_num(nums, 0) # 調用函數(shù)計算次數(shù)print(min_num)

題目二:拼接遞增序列

題目描述:一段鋼琴旋律中每個字符都可以用一個小寫英文字母表示。當這段英文字母為非遞減的,稱這段旋律為高昂的,如aaa,bbb,cde。用n段高昂旋律拼接出一段盡可能長的高昂旋律,問最長多長。

輸入示例: 3 aaa bbb acd 輸出: 6

Python 代碼示例:

import sysdef max_string(str_list, num): # 尋找最大值函數(shù)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): # 有點像動態(tài)規(guī)劃思想,解決子序列和之前序列構成新序列最大值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()) # 子序列個數(shù)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) # 調用尋找最大值函數(shù)print(max_length)

總結

以上是生活随笔為你收集整理的2020春招机考汇总2:扑克牌打出最小次数、钢琴高昂旋律(拼接递增序列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。