ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7167|回复: 52

剩余定律的自定义函数解法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-16 11:33 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:其他结构和算法
孙子剩余定律的一个例子:

如果5个人一桌,多4个人。
如果7个人一桌,多6个人。
如果11个人一桌,正好。
如果3个人一桌,多2个人。
请问这屋里多少人
+++++++++++++++++++++++

计算过程如下:
从小数字条件开始算,比较方便。

1. 【条件1】
取【除3余2】 和 【除5余4】作为条件,
则必须满足 mod(3k+2,5)=4,求得:

k 除5余数
1 0
2 3
3 1
4 4

因此,得到符合同时满足【除3余2】和【除5余4】的数是:
【3*4+2=14】


这样以【3*5=15】为除数【14】为余数,
得到【3*5*k+14】这样的数必定都能满足条件1

因为,第一部分3*5*k分别被3或5整除,
而已求得的14能满足被3除余2以及被5除余4.


2.【条件2】
取【除15余14】 和 【除7余6】作为条件,
则必须满足 mod(15k+14,7)=6,求得k=6
(15除7每次余1,而14被7整除,所以k=余数=6)

即:15*6+14=104


因此,得到新的数是:
以【3*5*7=105】为除数【104】为余数,
得到【105*k+104】这样的数必定都能满足条件1和条件2

105能分别被3、5、7整除,
而104除3余2,除5余4,除7余6


3. 【条件3】
取【除105余104】 和 【除11余0】作为条件,
则必须满足 mod(105k+104,11)=0,求得k=1
(105除11每次余6,而104除11余5,所以k=1即可满足)

即有:105*1+104=209


最后209就是答案了。


+++++++++++++++++++++++

解题过程编写为VBA自定义函数,则有:


  1. Function y0(n1, r1, n2, r2)
  2.     If r2 >= n2 Then y0 = "r2>=n2 Err !": Exit Function
  3.     If n1 = n2 Then If r1 = r2 Then y0 = n1 + r1 Else y0 = "r1<>r2 Err !": Exit Function
  4.     If r1 = r2 Then y0 = n1 * n2 + r1
  5.    
  6.     If n1 < n2 Then 'Let n1>n2 = True
  7.         t = n1: n1 = n2: n2 = t
  8.         t = r1: r1 = r2: r2 = t
  9.     End If
  10.    
  11.     s = n1 Mod n2
  12.     t = IIf(r1 < n2, r1, r1 Mod n2)
  13.     t = r2 - t + IIf(r2 < t, n2, 0)
  14.     For k = 0 To n2
  15.         'If s * k Mod n2 = t Then Exit For
  16.         If s * k - Int(s * k / n2) * n2 = t Then Exit For
  17.     Next
  18.     y0 = n1 * k + r1
  19.         
  20. End Function

复制代码


请看附件:

剩余定律.zip

14.02 KB, 下载次数: 68

TA的精华主题

TA的得分主题

发表于 2011-7-16 11:56 | 显示全部楼层
此自定义函数与EXCEL自带函数比较:

=MODE(ROW(1:99)*{3,5,7,11}+{2,4,6,0})

[ 本帖最后由 chenzyyysl 于 2011-7-16 11:59 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-17 08:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
算法老大难来学学

TA的精华主题

TA的得分主题

发表于 2011-7-17 09:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 chenzyyysl 于 2011-7-16 11:56 发表
此自定义函数与EXCEL自带函数比较:

=MODE(ROW(1:99)*{3,5,7,11}+{2,4,6,0})

高,学习了!可为什么是1:99呢?当然是越大越好!

[ 本帖最后由 dragonthree 于 2011-7-17 09:54 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-17 12:29 | 显示全部楼层
很奇妙的mode函数使用啊。

不过,当数字增大时,结果不正确的可能性也变大了吧。

那就需要把99增加到999,甚至9999了吧。

TA的精华主题

TA的得分主题

发表于 2012-3-21 15:57 | 显示全部楼层
老师,您好,我有个关于排列组合的问题,liucqa 老师让我来请教您,您看有时间帮我看一下,多谢啦!!

里面有两个范例,如何做拿到题呢:由表一得出表二:

范例及问题.rar (24.9 KB, 下载次数: 16)

多谢啦!!

TA的精华主题

TA的得分主题

发表于 2012-3-21 16:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-21 16:25 | 显示全部楼层
不要取3、5、7,改为7,17,23或者更大呢?还没得到要点。

TA的精华主题

TA的得分主题

发表于 2012-3-21 16:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2011-7-17 12:29
很奇妙的mode函数使用啊。

不过,当数字增大时,结果不正确的可能性也变大了吧。

老师,您好,我有个关于排列组合的问题,liucqa 老师让我来请教您,您看有时间帮我看一下,多谢啦!!

里面有两个范例,如何做拿到题呢:由表一得出表二:

范例及问题.rar (24.9 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-21 17:16 | 显示全部楼层
Zamyi 发表于 2012-3-21 16:25
不要取3、5、7,改为7,17,23或者更大呢?还没得到要点。

3,5,7只是举例。

实际上我的解法,当然可以是任意数字作为除数。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 07:10 , Processed in 0.049821 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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