jmyhyu 发表于 2010-4-30 18:33:41

递归即可,我以前写过一个VB代码:http://blog.csdn.net/northwolves/archive/2007/12/03/1912809.aspx
northwolves 发表于 2010-4-24 23:42 http://bbs.emath.ac.cn/images/common/back.gif

写代码的话就简单多了
但是纯数学方法。。。

wayne 发表于 2019-10-10 08:32:16

效率最高的代码:
Select], Length] == 6 &]

chyanog 发表于 2019-10-10 21:11:44

如果问题改成从1-33中任取10个数使和为102,用IntegerPartitions速度也不够快了
Select],DuplicateFreeQ]//Length//AbsoluteTiming

Compile[{},Sum,{a,5},{b,a+1,(66-a)/9},{c,b+1,1/8 (74-a-b)},{d,c+1,1/7 (81-a-b-c)},{e,d+1,1/6 (87-a-b-c-d)},{f,e+1,1/5 (92-a-b-c-d-e)},{g,f+1,1/4 (96-a-b-c-d-e-f)},{h,g+1,1/3 (99-a-b-c-d-e-f-g)},{i,h+1,1/2 (101-a-b-c-d-e-f-g-h)}]][]//AbsoluteTiming
第二种方法如果能写成递归会简洁一些

markfang2050 发表于 2019-10-18 22:57:10

# !/usr/bin/env python3.6.4
# -*- coding: utf-8 -*-
# @Author:Nicolas TU
# @Date: 2019-10-18 20:57:07
#从1-33中,任取6个不同的数,要求和为102,共有几种取法?
#ANS:20076 ​​​​


import time
time_start=time.time()#计算时间开始

j=0;
for a in range(1,33+1):# 迭代 1 到 33之间的数.假设a>=b>=c>=d>=e>=f,避免重复问题;
   for b in range(1,a+1):
       for c in range(1,b+1):
         for d in range(1,c+1):
               for e in range(1,d+1):
                   for f in range(1,e+1):
                     
                  # 逻辑关系
                        if a+b+c+d+e+f==102and\
                                    a!=b and a!=c and a!=d and a!=e and a!=f and\
                                    b!=c and b!=d and b!=e and b!=f and\
                                    c!=d and c!=e and c!=fand\
                                    d!=e and d!=f and\
                                    e!=f :#也可用列表来去重,len(set(list))==6;
                                    j += 1 # 统计解的个数
                                    #print('-'*60)
                                    #print ('第%d组解为:%d,%d,%d,%d,%d,%d\n.' % (j,a,b,c,d,e,f))
time_end=time.time()#计算时间结束                              
print('-'*60)   
print ('总计存在%d组解。' %j)
print('-'*60)

print('python3.6程序运行',time_end-time_start,'秒。')
print('-'*60)

'''
------------------------------------------------------------
总计存在20076组解。
------------------------------------------------------------
python3.6程序运行 1.4291820526123047 秒。
------------------------------------------------------------'''


'''

.·.·. 发表于 2019-10-19 08:43:42

markfang2050 发表于 2019-10-18 22:57
# !/usr/bin/env python3.6.4
# -*- coding: utf-8 -*-
# @Author:Nicolas TU


或许你应该跟Mathematica比一比速度……

markfang2050 发表于 2019-10-19 20:47:40

.·.·. 发表于 2019-10-19 08:43
或许你应该跟Mathematica比一比速度……

不比。么有可比性。MMA效率高。
页: 1 2 [3]
查看完整版本: 从1-33中,任取6个数,要求和为102,共有几种取法?