首页 > 教育

求问那些数字加起来可以得152205.3

更新时间2019-09-26 01:56:59

求问那些数字加起来可以得152205.3

这个问题,或是类似、相似的问题,就自己而言,已经看到过不下20多个了;

 

这里先给出一个解决方法,然后再作一些讨论;


假设在A列,从第r=2行开始,连续的单元格给出要判别的数字,比如n=6个数;

在C列给"和"的结果t:

 

先在VBA的"模块"页面编译好以下代码:


Function re(r, n, t)

   Dim nu(15), nv(15)

   Dim i As Long

   m = 0

   For i = 1 To n

     x = Cells(r - 1 + i, 1)

     If Round(x, 8) <= Round(t, 8) Then

       m = m + 1

       nu(m) = x

     End If

   Next i

 

   For i = 1 To m ^ m

     s = 0

     re = ""

     For j = 1 To m

       nv(j) = 0

     Next j

     For j = 1 To 1 + Int((i - 1) / m ^ (m - 1))

       nv(j) = ((Int((i - 1) / m ^ (j - 1))) Mod m) + 1

       For k = 1 To j - 1

         If nv(k) = nv(j) Then GoTo 10

       Next k

     Next j

     For j = 1 To m

       If nv(j) > 0 Then

         s = s + nu(nv(j))

         re = re & Format(nu(nv(j)), "0.000") & "+"

       End If

     Next j

     If Abs(s - t) < 0.00000001 Then

       re = Format(t, "0.000") & "=" & Left(re, Len(re) - 1)

       Exit Function

     End If

10 Next i

   re = "未能匹配得到!"

End Function


该函数有3个输入参数,分别对应上述的r,n,t

所以,在E2单元格输入公式

=re(2,6,$C2)

这样即可判别出"和"t是由A列中的哪几个数字加总而来的;

见附图:

求问那些数字加起来可以得152205.3

 

但是,但是,但是,这是一个非常"鸡肋"的方法:

1 由于要对任意数据进行判别,只能采用"穷举"法,没有更为"智能"、"睿智"的方法;


2 "穷举"是一种很"无奈"、很"鸡肋"的方法,它牵涉到n^n的可能性,比如n=3,3^3=27种;还有题述给出的n=12,12^12=8,916,100,448,256【约9万亿】种;当然,排除了一些重复,实际会少一点,但数量级是不会减少的;


3 由于实际的算法只是找到第1种可能的"加总形"即可,所以最终的计算组合会视乎总个数n及加总可能涉及到的最后一个数值的前后有关;

计算中,尝试了n=10,加总涉及的最后是的第6个数的形,以VBA这种效率低下的"解析程序"语言及不高的手提电脑硬件配置,花费50分钟才能得出"穷举"结果;


4 当然,如果用C++,或汇编语言,上大型或超级计算机,肯定能提高效率;


5 还有一个限制,就是编程语言中的整形数的表达范围,用长整型也仅能到10亿的数级,像题述n=12,9万亿的量级还是无法实现;

当然,可以用编程方法使之能处理"任意"量级的整数,但还是要以时间为代价,也即会增加总体话费的时间;


可能无法解决n太大【即便是题述n=12的情形】的问题,但希望对问题的理解有所帮助。

下拉,自动求和,根据最后一位“.3”可以依次排除。

excel中有自动求和呀

上一篇:要拒绝毒品,我们除了要知道什么是毒品、知道毒品极易成瘾、知道毒品的危害以外,还要怎么做?

下一篇:CNDPE是什么意思