找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2613|回复: 4

[求助] 请各位大神帮忙指点解决求值问题

1

主题

1

帖子

1

积分

贫民

积分
1
hanzaicheng 发表于 2018-11-4 15:50:07 | 显示全部楼层 |阅读模式
如果a,b,c,d,e均为<=10的整数,sum=a+b+c+d+e,sum=17,怎么能利用pathon程序计算出满足sum=17的各种情况,即a,b,c,d,e都有哪些数值组合能满足,求各位大神指点指点用pathon怎么实现。
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-11-5 11:59:33 | 显示全部楼层
  1. a=b=c=d=e=range(0,11)
  2. for i in a:
  3.     for j in b:
  4.         for k in c:
  5.             for l in d:
  6.                 for m in e:
  7.                     mylist=[i,j,k,l,m]
  8.                     if (len(set(mylist))==5) and (sum(mylist)==17):
  9.                         print(i,j,k,l,m)
复制代码
回复 支持 反对

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2018-11-5 14:27:06 | 显示全部楼层
本帖最后由 uitb 于 2018-11-5 14:29 编辑

递归方式,优点:不用写那么多循环,在数的数量不止五个时候更方便,几十个数都行,缺点:看着烧脑,写着跟烧脑
  1. def func(sum_,n,com = [],all_com=[]):
  2.     #sum_五个数的总和,n数的数量
  3.     for i in range(11):
  4.         c = com[:]
  5.         if i not in c: #控制5个数是否能相同,有该条件则五个数完全不同
  6.             c.append(i)
  7.         else:
  8.             continue
  9.         if sum(c) > sum_:
  10.             break
  11.         elif len(c) < n:
  12.             func(sum_,n,c,all_com)

  13.         if len(c) == n and sum(c)==sum_ and c not in all_com:
  14.             all_com.append(c)

  15.     return all_com
  16. all_combine = func(17,5)
复制代码

回复 支持 反对

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
艾幻翔 发表于 2018-11-21 19:04:36 | 显示全部楼层
本帖最后由 艾幻翔 于 2018-11-21 19:12 编辑

献丑
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # Created by lightwave on 2017/9/6
  4. # Copyright (c) 2017 lightwave. All rights reserved.
  5. from itertools import product


  6. def func(num_count, num_sun, start=0, end=10, is_repeat=False):
  7.     """
  8.     如果a,b,c,d,e均为<=10的整数,sum=a+b+c+d+e,sum=17, 即满足sum=17的各种情况
  9.     求a,b,c,d,e都有哪些数值组合能满足
  10.     :param num_count: 数字个数
  11.     :param num_sun: 数字之和
  12.     :param start: 数字起始值
  13.     :param end: 数字结束值
  14.     :param is_repeat: 数字是否允许重复,False不允许重复, True允许重复
  15.     :return:
  16.     """

  17.     number_list = product(range(start, end + 1), repeat=num_count)
  18.     number_list = filter(lambda x: sum(x) == num_sun, number_list)

  19.     if not is_repeat:
  20.         number_list = filter(lambda x: len(set(x)) == num_count, number_list)

  21.     return iter(number_list)


  22. if __name__ == '__main__':
  23.     results1 = func(5, 17)  # 不允许重复数字
  24.     results2 = func(5, 17, is_repeat=True)  # 允许重复数字

  25.     print("results1", len(list(results1)))  # 1440
  26.     print("results2", len(list(results2)))  # 4935
复制代码
回复 支持 反对

使用道具 举报

0

主题

102

帖子

102

积分

侠客

积分
102
傻眼貓咪 发表于 2021-8-7 18:36:21 | 显示全部楼层
  1. num = 17
  2. arr = []
  3. for a in range(1, num+1):
  4.     for b in range(1, num+1):
  5.         for c in range(1, num+1):
  6.             for d in range(1, num+1):
  7.                 for e in range(1, num+1):
  8.                     temp = {a, b, c, d, e}
  9.                     if len(temp) == 5 and sum(temp) == num:
  10.                         temp = list(temp)
  11.                         temp.sort()
  12.                         if temp not in arr:
  13.                             arr.append(temp)
  14. print(arr)
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表