ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [第96期]换硬币[已总结]

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-30 13:54 | 显示全部楼层
本帖最后由 lee1892 于 2013-9-3 11:20 编辑

感谢各位参与,楼上有重复发贴的,均以最后一贴为准,所得运行结果如下:[code=vb]ID: <大灰狼1976>
Result: 13, 144, 1370, 96394, 1427537, 98274986,
Time: 0.000s
ID: zhyj_88
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150
Time: 0.016s
ID: xiaofx11
Result: 13, 144, 1370, 96394, 1427537, 98274986,
Time: 0.000s
ID: <清风_ll>
Result: 13, 144, 1370, 96394, 1427537, 98274986,
Time: 0.020s
ID: wcymiss
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150
Time: 0.000s
ID: 小花鹿
Result: 13, 144, 1370, 96394, 1427537, 98274986
Time: 11.066s
ID: <yuanhongly>
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150
Time: 0.016s
ID: xzk235
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150
Time: 0.016s
ID: hellohaha
Result: 13, 144, 1370, 96394, 1427537, 98274986
Time: 9.555s
ID: <huahua2005>
Result: 13, 144, 1370, 96394, 1427537, 98274986
Time: 1.234s
ID: Bodhidharma
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150
Time: 0.750s
ID: <JsXjd>
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150, 54563
Time: 0.000s
ID: <JsXjd2>
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150, 54563
Time: 0.000s
ID: <minjiwei>
Result: 13, 144, 1370, 96394, 1427537, 98274986
Time: 5.559s
ID: <delete_007>
Result: 13, 144, 1370, 96394, 1427537, 98274986, 4243218150
Time: 0.000s
=======================
' Not included in the attachement:
ID: 5blessyou
Result: 13, 144, 1370, 96394, 1427537, 98274986
Time: 6.275s
[/code]我个人认为的评分如下:
ID
正确结果分
1秒内计算分
可于0.1秒内计算10^9分
优秀追加分
合计得分
备注
大灰狼1976
变量类型限制
3
巧妙的字典使用
zhyj_88
×
×
2
看花眼了,代码不自证
11出错
xiaofx11
变量类型限制

2
代码自证,但未得前3分
清风_ll
变量类型限制

2
wcymiss

3

小花鹿
超时
超时

1
yuanhongly

3

xzk235
×
×
2
代码自证
11出错,按之前原则未得前3分
hellohaha
超时
超时

1
huahua2005
超时
超时

1
Bodhidharma
超时

2
代码自证,但未得前3分
JsXjd
×

2
11出错
minjiwei
超时
超时

1
代码自证,但未得前3分
delete_007

3
  
5blessyou
超时
超时
1

这是一个非常简单的利用递归或则迭代均可以得到答案的题目。

1、速度:为了达到题目要求的速度,一个简单而行之有效的方法是所谓的空间换时间,即将中间计算结果保留的内存中,以避免重复计算从而达到提速的效果。大多数同学都采用了字典对象,实际上用数组也能达到目的。

2、自证:貌似所有同学都不约而同的选择2、3、4的最小公倍数作为收敛退出条件,结果虽然正确,但我个人是反对的。理由是代码不能自证,或则将1~12的结果在帖子里列出来并证明“大于12的所有数均满足除2、3、4的和大于自身”,但没人这么做。正确的递归退出条件应当是nCoin=0 OR nCoin >= INT(nCoin/2) + INT(nCoin/3) + INT(nCoin/4),此时递归返回值亦为0 | nCoin

题目最初的设想是锻炼递归思维、变量类型的正确使用、代码加速技巧。

由于题目比较简单,我所准备的代码与大家大同小异,就不另贴了,呵呵~
====================================
ON 2013.09.02 REV. 1
鉴于有同学十分不满意,多说两句。
请自行仔细审题,题目中从未提到速度是评分的主要因素,充其量是个限制条件。
实际上从逻辑上而言,凡未出现类似 If nCoin >= INT(nCoin / 2) + INT(nCoin / 3) + INT(nCoin / 4) Then ... 的,使得代码能够按题意自证的,均可判错(我个人如此认为)。
如认为迭代实现比递归实现难度大的,请学习2楼大灰狼同学的代码,另外这与本题的评分标准无关。

====================================
ON 2013.09.03 REV. 2
版主说了,发现问题要改正,所以有问题的三人各少1分,呵呵~
xzk同学按之前未得前3分原则,则代码自证的追加分也木有了~



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

点评

楼主有没搞错?"楼18_jsxjd_1"的运行时间是“楼13_xzk235”的 1/3,是和“楼10_zhyj_88”非常接近的。 另外,"楼18_jsxjd_1"都没用Function,而且还都一个数。评分是怎么考虑的?能用Function限制结构还   发表于 2013-8-31 18:37

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-8-30 15:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub ChangeCoin()
  2.     Dim aCoins(), aRes(), ncoin, t#
  3.     ' 可更改段
  4.     ' 只能是Dim
  5.     Dim m As Byte
  6.     ' 可更改结束
  7.     aCoins = Array(12, 123, 1000, 50000, 600000, 30000000)
  8.     ReDim aRes(UBound(aCoins))
  9.     t = Timer
  10.     ' 可更改段
  11.     For Each ncoin In aCoins
  12.         '....
  13.         aRes(m) = abc(ncoin)
  14.         m = m + 1
  15.     Next
  16.     ' 可更改结束
  17.     Debug.Print "ID: " & "<YOUR ID>"
  18.     Debug.Print "Result: " & Join(aRes, ", ")
  19.     Debug.Print "Time: " & Format(Timer - t, "0.000s")
  20. End Sub
  21. Function abc(ncoin) As Long
  22.     If ncoin > 11 Then
  23.         
  24.         abc = abc(ncoin \ 2) + abc(ncoin \ 3) + abc(ncoin \ 4)
  25.     Else
  26.         abc = ncoin
  27.     End If
  28. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-8-31 10:45 | 显示全部楼层
lee1892 发表于 2013-8-30 13:54
感谢各位参与,楼上有重复发贴的,均以最后一贴为准,所得运行结果如下:我个人认为的评分如下:

这是一 ...

明白了。看来我是做的最粗糙的一个。{:soso_e143:}

TA的精华主题

TA的得分主题

发表于 2013-8-31 18:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jsxjd 于 2013-8-31 18:46 编辑
lee1892 发表于 2013-8-30 13:54
感谢各位参与,楼上有重复发贴的,均以最后一贴为准,所得运行结果如下:我个人认为的评分如下:

这是一 ...


建议楼主把“aCoins”改成一样的,用下面的代码重新进行测试:
  1. Sub test()
  2.     t0 = Timer
  3.         For i = 1 To 100:
  4.             楼10_zhyj_88.ChangeCoin
  5.         Next
  6.     t1 = Timer
  7.         For i = 1 To 100:
  8.             Call 楼13_xzk235.ChangeCoin
  9.         Next
  10.     t2 = Timer
  11.         For i = 1 To 100:
  12.             Call 楼18_jsxjd_1.ChangeCoin
  13.         Next
  14.     t3 = Timer
  15.     Debug.Print t1 - t0, t2 - t1, t3 - t2
  16. End Sub
复制代码
另外,能用 Function 递归 限制程序结构还有意义吗?

TA的精华主题

TA的得分主题

发表于 2013-8-31 19:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jsxjd 发表于 2013-8-31 18:39
建议楼主把“aCoins”改成一样的,用下面的代码重新进行测试:另外,能用 Function 递归 限制程序结构还 ...
另外,能用 Function 递归 限制程序结构还有意义吗?

嗯…這個我也覺得有點奇怪
我也是以為不能在外面另加function(根據原題程式的結構)
所以才在原本的sub之中增加類似stack的程序,而不是直接用recursion
但是看大多數人好像都是另外在sub程序外面增加function

点评

同感,其实难度在于用非递归函数实现!  发表于 2013-8-31 19:54

TA的精华主题

TA的得分主题

发表于 2013-8-31 20:06 | 显示全部楼层
Bodhidharma 发表于 2013-8-31 19:18
嗯…這個我也覺得有點奇怪
我也是以為不能在外面另加function(根據原題程式的結構)
所以才在原本的su ...

答题要求:
可完形填空如下,允许添加过程或函数及公共变量

以上是出楼主出题时说明的。
看来是你们粗心没有看懂要求。

TA的精华主题

TA的得分主题

发表于 2013-8-31 20:20 | 显示全部楼层
跟楼主讨论个问题:
楼主说“即任一正整数”,也就是说11应该也属于这个范围吧,但是,你把数组中的12改为11,看看有的代码是不是结果是错误的?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-8-31 20:32 | 显示全部楼层
yuanhongly 发表于 2013-8-31 20:06
答题要求:
可完形填空如下,允许添加过程或函数及公共变量:

用函数还需要可更改段吗?

TA的精华主题

TA的得分主题

发表于 2013-9-1 07:36 | 显示全部楼层
jsxjd 发表于 2013-8-31 20:32
用函数还需要可更改段吗?

楼主题是这样要求的,不信你再去仔细读读题吧。

点评

哈哈,只是逻辑上有点矛盾。  发表于 2013-9-1 09:46

TA的精华主题

TA的得分主题

发表于 2013-9-1 08:01 | 显示全部楼层
jsxjd 发表于 2013-8-31 20:32
用函数还需要可更改段吗?

阅卷是个体力活。
楼主的完形填空可能是为了阅卷方便和测速环境的一致而设置的。

你可以在答题期间就题目的疑虑与楼主短信交流啊。我就常这样做,我做楼主的时候也常收到别人的各种咨询。多沟通才能相互理解。

以上言语如有冒犯,还请海涵。

点评

没有冒犯!!!  发表于 2013-9-9 15:18
很好的方式,沟通是理解的桥梁。  发表于 2013-9-1 09:45
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 19:15 , Processed in 0.042666 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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