生成回文

2014年8月29日

前一百个回文数是0、1、2、3、4、5、6、7、8、9、11、22、33、44、55、66、77、88、99、101、111、121、131、141、151、161、171、181、191、202、212、222、232、242、252、262、272、282、292、303、313、323、333、343、353、363、373、383、393、404、414、424、434、444、454、464、474、484、494、505、515、525、535、545、555、565 575中,585、595、606、616、626、636、646、656、666、676、686、696、707、717、727、737、747、757、767、777、787、797、808、818、828、838、868、878、888、898和909。

你的任务是编写一个程序,按顺序生成回文数字;用它可以找到千分之十的回文数。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

整数对数

2014年8月26日

这个整数对数中的函数标准前奏曲看起来像这样:

(定义(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

耐心排序

2014年8月22日

这种排序算法的名字来源于Patience游戏(这是英国的名字,我们在美国称之为Solitaire),因为它的实现类似于对一副洗牌进行排序:

从没有牌堆开始,将牌堆中的下一张牌添加到第一张牌堆中,顶部的牌大于牌堆中下一张的牌。如果牌组中的下一张牌大于所有牌堆中的顶牌,则开始新的牌堆。当牌组用完时,通过在每个步骤中选择最小的可见牌,按顺序收集牌。

例如,考虑对列表进行排序(4 3 9 1 5 2 7 8 6)。第一个堆栈得到4和3。因为9大于3,所以它开始第二个堆栈,1放在第一个堆栈上,然后5和2放在第二个栈上。此时,第一个堆栈(从上到下)由(1 3 4)组成,第二个堆栈由(2 5 9)组成,其余的甲板由(7 8 6)组成。现在,7在第三个堆栈上,8在第四个堆栈上,6在第三个堆栈中的7之上。发完所有牌后,从第一叠中收集1张,从第二叠中收集2张,从第一堆中收集3张和4张,从另一堆中收集5张,从三堆中收集6张和7张,从四堆中收集8张,从二堆中收集9张。该算法的复杂性为O(n个日志n个).

您的任务是实现耐心排序算法。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

裂解器桶

2014年8月19日

上周我出城时,一天晚上在裂解器桶它在每张桌子上都提供了一个三角形拼图,这样你就可以在等待食物的时候自娱自乐了。当我女儿要求我解决这个问题时,我失败了,但我答应她我会写一个程序来解决它。

如右图所示,拼图是一个有15个洞和14个钉子的三角形;一个洞最初是空的。游戏通过13次跳跃进行;每次跳跃都会从三角形中去掉一个钉子,所以在13次跳跃的末尾,会剩下一个钉子钉。一次跳跃将一个木桩从开始的洞,越过一个被占用的洞,跳到一个空的结束洞,去掉中间的木桩。

你的任务是编写一个程序来解决Cracker Barrel难题;找到所有可能的解决方案,从一个空角洞开始,到原来空角的剩余钉子结束。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

大模指数

2014年8月8日

今天的练习是堆栈溢出和/r/learnprogramming等地方常见的问题来源;它必须来自SPOJ或UVA等竞争性节目网站。这个问题最常见的说法是这样的:

给你两个正整数P(P),其中任何一个都可能很大,最多可达一百万个数字。计算P(P)也就是说,P(P)提高到电源。为方便起见,给出模10的结果9+ 7. 例如,使用P(P)=345349853498754398754398975349875和=9347534975939838475439574373495,预期结果为735851262。

短语“为了你的方便”是一个泄露,即模计算是一个技巧;那种竞赛网站从不为你的方便做任何事情。事实上,根据费马小定理的推论,P(P)(修订版) ≡第页q个(修订版)其中第页=P(P)(修订版)和q个=(修订版− 1). 这很容易。计算第页q个两者均小于232,所以我们可以使用上一次练习进行计算。

您的任务是编写一个程序来执行上述大型模幂运算。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

最小回文基数

2014年8月5日

今天我们有一个简单的小问题:给定一个整数n个>2,找到最小值b条>其中1个n个基础b条是一个回文。例如,n个= 15 = 11112= 120= 334= 305= 236= 217= 178= 169= 1510= 1411= 1312= 1213= 1114; 其中,基2、4和14构成回文,其中最小的是2,所以正确答案是2。

你的任务是编写一个程序,计算一个数字的最小基数n个是一个回文。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

K't最大项目

2014年8月1日

今天的练习是一个常见的面试问题,它本身也很有趣:

查找k个文件中第个最大的整数n个整数,其中n个很大(定义为太大,一次无法放入内存),并且k个是小的(定义为足够小,可以放在内存中)。

您的任务是编写上述程序。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2