23 请各位大神帮忙指点解决求值问题

如果a,b,c,d,e均为<=10的整数,sum=a+b+c+d+e,sum=17,怎么能利用pathon程序计算出满足sum=17的各种情况,即a,b,c,d,e都有哪些数值组合能满足,求各位大神指点指点用pathon怎么实现。


请先 登录 后评论

最佳答案 2021-09-23 22:47


献丑

  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
复制代码
请先 登录 后评论

其它 3 个回答

泡泡鱼
  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)
复制代码
请先 登录 后评论
木子丶簫


递归方式,优点:不用写那么多循环,在数的数量不止五个时候更方便,几十个数都行,缺点:看着烧脑,写着跟烧脑

  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)
复制代码

请先 登录 后评论
凌辉
  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)
复制代码
请先 登录 后评论
  • 5 关注
  • 1 收藏,584 浏览
  • 樱桃小铺 提出于 2021-09-23 22:47

相似问题