ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-9-1 09:55 | 显示全部楼层
本帖最后由 Bodhidharma 于 2013-9-1 09:56 编辑
wcymiss 发表于 2013-9-1 08:01
阅卷是个体力活。
楼主的完形填空可能是为了阅卷方便和测速环境的一致而设置的。

原來如此…
我是看到"5、没有按要求填空的可能会被扣1分,比如删除了原有的注释、填错了地方之类的~"
就嚇到了,不敢在可更改段之外加任何東西(汗)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-2 09:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lee1892 于 2013-9-2 12:58 编辑

参考答案:
[code=vb]Private oDic As Object
Sub ChangeCoin()
    Dim aCoins(), aRes(), nCoin, t#
    ' 可更改段
    Dim i%
    ' 只能是Dim
    ' 可更改结束
    aCoins = Array(12, 123, 1000, 50000, 600000, 30000000, 10 ^ 9)
    ReDim aRes(UBound(aCoins))
    t = Timer
    ' 可更改段
    Set oDic = CreateObject("Scripting.Dictionary")
    For Each nCoin In aCoins
        aRes(i) = Exchange(nCoin)
        i = i + 1
    Next
    oDic.RemoveAll: Set oDic = Nothing
    ' 可更改结束
    Debug.Print "ID: " & "Lee1892"
    Debug.Print "Result: " & Join(aRes, ", ")
    Debug.Print "Time: " & Format(Timer - t, "0.000s")
End Sub

Function Exchange@(ByRef nCoin)
    Dim nSum@
    If nCoin = 0 Then Exchange = 0: Exit Function
    If oDic.Exists(nCoin) Then
        Exchange = oDic(nCoin)
    Else
        nSum = Exchange(nCoin \ 2) + Exchange(nCoin \ 3) + Exchange(nCoin \ 4)
        Exchange = IIf(nCoin >= nSum, nCoin, nSum)
        oDic(nCoin) = Exchange
    End If
End Function[/code]
再追加一句,代码自证应该是如上的方式,即判断 上述代码中的 nSum 与 nCoin 的大小,而不是 nCoin\2 + nCoin\3 + nCoin\4,或言先递归后判断而不是先判断后递归。
所以严格意义上而言,没有人是确实做到代码自证的,呵呵~
=================
可以考虑一下如果将2、3、4换成别的数字,各位的代码需要如何改动呢?比如2、3、5,又或则是2、3、3,嗯嗯~



点评

用递归函数本题就大大缩水了。  发表于 2013-9-2 09:47

TA的精华主题

TA的得分主题

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

使用Array模拟堆栈在VBA中是效率很低的办法,VBA中有Collection对象可以很方便、高效的模拟堆栈。
另外,即便是纯粹的迭代实现也并不麻烦。

建议多翻翻论坛中的帖子,比如我的主题贴:浅谈数据结构 (作个广告哈~)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-2 10:11 | 显示全部楼层
小花鹿 发表于 2013-8-31 20:20
跟楼主讨论个问题:
楼主说“即任一正整数”,也就是说11应该也属于这个范围吧,但是,你把数组中的12改为 ...

噢,有道理!

俺看得太不仔细了
如此,则 zhyj_88 | xzk235 | JsXjd 三人均会得到错误答案!

点评

发现问题就要改正,如评分有修改,请与我联系。  发表于 2013-9-3 10:53

TA的精华主题

TA的得分主题

发表于 2013-9-2 16:47 | 显示全部楼层
lee1892 发表于 2013-9-2 09:46
使用Array模拟堆栈在VBA中是效率很低的办法,VBA中有Collection对象可以很方便、高效的模拟堆栈。
另外, ...

大神们,再多来点题吧。学习学习,练习练习。

TA的精华主题

TA的得分主题

发表于 2013-9-3 13:08 | 显示全部楼层
不满意的,按以下标准评分:




VBA不会,娱乐一下哈。

本帖子中包含更多资源

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

x

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-5 11:47 | 显示全部楼层
incognito 发表于 2013-9-3 13:08
不满意的,按以下标准评分:

老兄这用的什么语言?不像C啊,PERL、PHP、JAVA、RUBY?
编译过执行的?呵呵~

fa(0)=0

TA的精华主题

TA的得分主题

发表于 2013-9-5 22:52 | 显示全部楼层
提个小小建议,出题后尽量不要更改条件
我声明变量一向够用主义,答题时并没有第三项10的9次方这个条件,所以你懂的,大数据出不来,
虽然有追加分,但就像捡到1000块钱又掉了500一样,虽然没少,总归有点郁闷。
废话不说,进入正题,建议如下:
1、出题后不到万不得已,不要修改条件;
2、如果非改不可,必须站内信息通知参与答题者
个人建议,仅供参考。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-5 22:59 | 显示全部楼层
本帖最后由 lee1892 于 2013-9-5 23:04 编辑
大灰狼1976 发表于 2013-9-5 22:52
提个小小建议,出题后尽量不要更改条件
我声明变量一向够用主义,答题时并没有第三项10的9次方这个条件,所 ...

你瞎说~
1,一开始就有
2,还没公布为正式题你就贴代码

最近网络造谣抓得严~
嗯,多说一句,你的代码逻辑一样是错的,只是结果对而已。看参考答案那楼,换俩数字就玩完,或者换俩带小数的~
{:soso_e128:}

TA的精华主题

TA的得分主题

发表于 2013-9-6 09:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
错就错了直说好了,我也在学习,第三项10的9次方这个条件说实话,没印象了,但你给出的代码里没有,这个是我的错,不好意思;

没贴正题就贴代码是我的错吗?是你在其他贴子里贴了个链接,又想设权限没成功,我才答的,你又没说是不是正式题,我只是回个贴,这我也有错?

另外,为什么要自证,很多牛人在代码里都会用到自已找到的常量,那个常量有自证过吗(比如希尔排序法和DOOM3的0x5f3759df),自证的意义呢,

我先找到规律不行啊,就是我说的,有简单的方法为何不用?无法简单找到规律的我当然会想其他办法。

如果我的代码完全不符合逻辑,那管答案做什么,直接PASS掉不就好了,固定在方法的框框内,难怪中国没有程序天才,只能做码字工。

最后说一句,通过这个事件,我能体会到香川群子老师的良苦用心,变量类型什么的,最讨厌了!{:soso_e141:}

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-21 18:29 , Processed in 0.049214 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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