这个整数对数中的函数标准前奏曲看起来像这样:
(定义(ilog b n)
(让循环1((lo0)(b^lo1)(hi1)(b_hib))
(如果(<b^hin)(循环1 hi b^hi(*hi 2)(*b^hi-b^hi))
(让循环2((lo-lo)(b^lo-b^lo)(hi-hi)(b_hi-b^hi))
(如果(<=(-hi-lo)1)(如果(=b^hin)hi-lo)
(let*((mid(商(+lo hi)2))
(b^mid(*b^lo(出口b(-mid-lo)))
(cond((<n b^mid)(环路2 loo b^lo-mid-b^mid
((<b^midn)(循环2中间b^mid-hi-b^hi)
(其他中间))
它在中执行二进制搜索回路1
直到n个括在中间b ^lo(b ^lo)和b^hi(你好),每个步骤加倍,然后在中细化二进制搜索回路2
,每一步将支架减半。
受到该功能的启发,Joe Marshall摆出了姿势这个谜题在他的抽象异端网站:
您可以通过以下方式快速获得数字的最高有效数字(最左边):
(定义(以n为基数的最左侧数字)
(如果(<n基数)
n个
(let((最左对(最左数字(*基数)n))
(如果(<leftmost-pair base)
最左端对
(最左端对基商)))
难题是调整这个代码以返回最左边数字的位置。
你的任务是编写Joe的拼图函数;你也可以点击他的网站来增加他的数据。完成后,欢迎您阅读或运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。
页:1 2