一共有23个已知数字,然后里面n个数之和是250430,n未知,现在需要知道是由哪几个数字组成了250430这个总数,只需要这个结果就行了,最好把代码也能给我,编程语言不限。证明不存在这个可能的话也可以。
23个已知数字:
20375
34665
26925
25060
22185
24375
22680
19195
19675
9800
10280
20090
22070
18765
18810
19180
15070
23000
18650
17320
21135
22440
18175
从23个已知数中取n个数,n个数之和是250430,求是哪几个数之和
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注 先排序,然后深度优先。
nums = [20375,34665,26925,25060, 22185,24375,22680,19195, 19675,9800,10280,20090, 22070,18765,18810,19180, 15070,23000,18650,17320, 21135,22440,18175] tar = 250430 def dfs(tar,nums,res): if sum(res)==tar: return res elif len(nums)<1 or sum(res)>tar: return False else: for i in range(len(nums)): temp = dfs(tar,nums[i+1:],res+[nums[i]]) if temp: return temp elif temp==False: break nums = sorted(nums) print(dfs(tar,nums,list()))
结果
[9800, 10280, 15070, 17320, 18175, 18650, 18765, 19180, 20090, 20375, 21135, 26925, 34665]
要找出所有的解,只要稍微改一下:
def dfs(tar,nums,res): if sum(res)==tar: all_res.append(res) elif len(nums)<1 or sum(res)>tar: return False else: for i in range(len(nums)): temp = dfs(tar,nums[i+1:],res+[nums[i]]) if temp==False: break nums = sorted(nums) all_res=[] dfs(tar,nums,list()) print(len(all_res)) print(sorted(all_res,key=len)[0])
可以看到总共有323种解,n最少的解是
323 [15070, 18175, 18765, 20090, 22185, 22440, 22680, 24375, 25060, 26925, 34665]
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 企业资源规划ERP沙盘模拟
- ¥15 前端echarts坐标轴问题
- ¥15 CMFCPropertyPage
- ¥15 ad5933的I2C
- ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
- ¥15 数学建模求思路及代码
- ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
- ¥15 谁会P4语言啊,我想请教一下
- ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
- ¥50 求解vmware的网络模式问题 别拿AI回答