ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-14 13:29 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他结构和算法
chenzyyysl 发表于 2012-5-14 09:15
Sub sss()
    Dim d As Integer, n As Integer, h As Integer, i As Integer
    i = 1

非常感谢老师的帮助,小弟不知是哪里考虑有欠妥?

TA的精华主题

TA的得分主题

发表于 2012-5-14 13:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
按F8,单步执行,看看和你想的是不是一样

TA的精华主题

TA的得分主题

发表于 2012-5-14 13:57 | 显示全部楼层
chenzyyysl 发表于 2012-5-14 09:00
Sub sss()
    Dim d As Integer, n As Integer, h As Integer
    For d = 1 To 100

Abs(d * 4 + n * 2 + h / 4 - 100) < 0.00001 与d * 4 + n * 2 + h / 4 = 100 有啥区别?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-14 13:58 | 显示全部楼层
本帖最后由 香川群子 于 2012-5-14 14:09 编辑
chenzyyysl 发表于 2012-5-14 09:15
Sub sss()
    Dim d As Integer, n As Integer, h As Integer, i As Integer
    i = 1


挑个毛病:

运行结果,少了一组合理解:男 20人,女 0人,小孩 80人。


代码循环,应该从0开始。


  1. Sub kagawa()
  2.     Dim d%, n%, h%, j%
  3.     [a1:c1] = Array("d(4)", "n(2)", "h(1/4)")
  4.     i = 1
  5.     For d = 0 To 100
  6.         For n = 0 To 100 - d
  7.             h = 100 - d - n
  8.             If d * 4 + n * 2 + h / 4 = 100 Then '已经定义数据类型为整数变量了,所以不需要ABS误差判断。
  9.                 i = i + 1
  10.                 Cells(i, 1) = d
  11.                 Cells(i, 2) = n
  12.                 Cells(i, 3) = h
  13.             End If
  14.         Next
  15.     Next
  16. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2012-5-14 14:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
改这2个,for n=0 to 100-d, 同样 for d=0 to 100,
这样就不会少了不全的人群组合

TA的精华主题

TA的得分主题

发表于 2012-5-14 14:07 | 显示全部楼层
本帖最后由 chenzyyysl 于 2012-5-14 14:08 编辑
Albert128 发表于 2012-5-14 13:57
Abs(d * 4 + n * 2 + h / 4 - 100) < 0.00001 与d * 4 + n * 2 + h / 4 = 100 有啥区别?


考虑浮点误差,否则有时会产生问题。
具体到这个地方,估计问题不大,你那个写法简单些

TA的精华主题

TA的得分主题

发表于 2012-5-14 14:14 | 显示全部楼层
这个不确定,h/4 应当自动转为浮点,所以我猜可能会有。而浮点误差较难验证,多数是遇到才知道。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-14 14:51 | 显示全部楼层
本帖最后由 香川群子 于 2012-5-14 14:53 编辑
Albert128 发表于 2012-5-13 21:14
您好!
本人学习了您的思路,求如下的问题不能如愿,请帮助,谢谢!
有100个人,其中:大男人d个,女人n个,小孩 ...


你的代码错误,原因在于n变量没有循环变化。

…………

下面,顺便用数学方法分析一下本题:

题目:
有100个人,其中:男人d个,女人n个,小孩h个;
现来搬100块砖,每个男人可搬4块,每个女人可搬2块,4个小孩共抬一块。
问100人中,男人,女人和小孩各自有多少人?


分析:
100个人100块砖,则平均正好1个人搬1块砖。
但可知,男人和女人搬运能力都是大于1的,只有小孩搬运能力小于1。

因此,肯定是4个小孩一组,然后分别和x个男人或y个女人组成1大组。

x个男人时,有人数: 4+x  = 1+4x (砖块数)
解一元一次方程得: x=1

即,1个男人和4个小孩成为一组时,是每5个人搬5块砖。


y个女人时,有人数: 4+y  = 1+2y (砖块数)
解一元一次方程得: y=3

即,3个女人和4个小孩成为一组时,是每7个人搬7块砖。


…………
到这里,可以知道,100个人搬100块砖,
可以把他们分为5人组x组的 p个组,以及7人组y组的 q个组。

列方程为 5p+7q=100
要求p、q都是整数。

则有: p = (100-7q)/5 = 20-q-0.4q
按整数解要求,则0.4q应为整数,即:0.4q=z,4q=10z,2q=5z,则可知q应该是5的整数倍。


…………
接下来就好解了:
  q     p          男d=p     女n=3q     小孩h=4p+4q
   0    20          20              0            =80
   5    13          13             15           =52+20=72
  10    6             6             30           =24+40=64
  15   -1 (无解)


以上为数学解析过程。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-5-14 14:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢老师们热情的讲解.

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-14 16:17 | 显示全部楼层
chenzyyysl 发表于 2012-5-14 14:14
这个不确定,h/4 应当自动转为浮点,所以我猜可能会有。而浮点误差较难验证,多数是遇到才知道。

h/4计算结果=0.25、0.5、0.75、1

在100以内计算,不会产生浮点误差。

你的浮点误差担心,是多余的。





您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 11:31 , Processed in 0.048238 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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