地上有四堆石子,石子数分别是1 9 15 31如果每次从其中的三堆同时各取出1个,然后都放入第四堆中,那么,能否经过若干次操作,使得这四堆石子的个数都相同? 如果能,输出操作步骤。
答案是不能。
这是我编辑的,但是不知道问题出在了哪里。求解答!!
剛剛寫了一篇回答, 用的是遞歸方法, 有點蠢了, 于是又重寫了个簡化的, 當然, 因爲太晚了, 難免有不當處, 拋磚引玉, 懽迎指正:
import pprint # 輸出結果時, 格式更友好
stone_src = [1, 9, 15, 31] # 原始石堆
stone_array = [sorted(stone_src)] # 用以檢查重復的二維列表
move_record = [stone_src] # 用以記錄步驟的二維列表
def move_stone(stone):
"""不能實現均分的條件是出現同樣的石頭堆數排列"""
while True:
stone_copy = stone.copy()
# 修改各項值
index_min = stone_copy.index(min(stone_copy))
stone_copy[index_min] += 3
for i in range(len(stone_copy)):
if i != index_min:
stone_copy[i] -= 1
move_record.append(stone_copy) # 添加到移動記錄列表
# 檢查是否全等, 即解決問題
if len(set(stone_copy)) == 1:
return True
else:
# 檢查是否出現不可解條件
if sorted(stone_copy) in stone_array:
return False
else:
stone_array.append(sorted(stone_copy))
stone = stone_copy
# 主流程
if sum(stone_src) % 4 == 0: # 判斷是否能均分
if move_stone(stone_src):
pprint.pp(move_record) # 如若解決, 則打印步驟
print('----解題完成, 步驟如上!!!!')
else:
print('----不能按題目方法求解!!!!')
else:
print('----數量不能均分!!!!')
已驗證, 如題的不能求解:
測試新的組合, [2, 14, 22, 22], 可求解, 並輸出步驟: