制作回文

2015年9月29日

今天我们有一个字符串操作的小练习:给定一个输入字符串,要么返回一个包含相同字符但排列成回文的字符串,要么表明不可能进行这样的重新排列。

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

页:1 2

乘完全数

2015年9月25日

正如普通读者所知,我非常喜欢娱乐数学和数论交叉的问题。今天的练习就是一个例子。

正如古希腊人所知,6和28等完美数字等于其等分除数之和(这些除数小于数字本身);例如,6=1+2+3和28=1+2+4+7+14。数学家将其称为P2数字除数之和,包括数字本身,是数字的两倍。

乘法完全数是指其除数之和是数字的倍数的数字;完全数有两倍于该数的除数和三倍于完全数P除数有三次之和、数字等等。

你的任务是编写一个程序,找出乘法完全数。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

我可以从我的统计数据中看出,人们喜欢家庭作业问题练习,我想是因为它们很短并且提供简单的练习。我也可以从阅读一些初学者留言板中看出,学生们似乎比过去更快地在网上发布作业问题,而不是自己找出解决方案,这可能是因为他们懒惰,也可能是因为老师没有提供足够的帮助。所以今天我们还有三个作业问题:

1) 给定一个整数列表,返回一个已删除所有重复项的列表。例如,给定输入列表[3、2、4、2、7、3、5、1、3],则返回输出列表[3,2,4,7,5,1]。

2) 给定两个整数列表,每个列表按升序排序,返回两个列表中通用的整数列表;输出列表也必须按升序排列。例如,给出输入列表[2、3、5、5、6、7、8、9],并且[1、2、4、5、5,7]返回输出列表[2,5,5,7]。

3) 给定一个正整数,确定它是否是一个完美的立方体。例如,整数125是一个完美的立方体,5*5*5,但整数121不是。

你的任务是编写解决这三个家庭作业问题的程序。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

三个家庭作业问题

2015年9月18日

今天我们有三个简单的练习来帮助初学者完成家庭作业;这三项练习都出现在上周的初创编程论坛上:

1) 编写一个递归函数来求第一个函数的和n个奇数整数。例如,如果n个=2,前两个奇数整数是1和3,它们的和是4。

2) 编写一个函数来计算字符串中字符的频率。例如,给定字符串“hello”,该函数应返回h、e、l和o的计数1、1、2和1。

3) 编写用Caesar密码加密和解密消息的函数。输入由大写字母和空格组成;“key”是一个整数,表示要移位的字母数。例如,消息ATTACK AT DAWN with a shift of 5被加密为FYYFHP FY IFBS。

你的任务是解决上面给出的三个家庭作业练习。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

时间算术

2015年9月15日

这个标准前奏曲提供了功能朱利安格雷戈里亚人用于执行数据运算。在今天的练习中,我们将扩展这些函数以提供时间运算。提供给的参数朱利安将是年、月、日、小时、分钟和秒,相同的参数将由返回格雷戈里亚人

你的任务是写新的朱利安格雷戈里亚人功能。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

找到中间值

2015年9月11日

如果数组已排序,则数组的中值为中间的值;如果数组的项数为奇数n个,中位数为(n个+1) 数组中第二大项(也是(n个+1) /2数组中最小的项),如果数组中的项数为偶数n个,中位数是n个/数组中第二个最小的项和n个/数组中第2个最大的项目。例如,数组[2,4,5,7,3,6,1]的中值为4,数组[5,2,1,6,3,4]的中值为3.5。

您的任务是编写一个程序,该程序接受一个8位整数数组(可能是排序的,但不一定是排序的),并在数组中查找中值;你应该找到一个线性时间和恒定空间的算法。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

费马师面临的挑战

2015年9月8日

皮埃尔·德·费马在1657年提出了这两个挑战:首先,找到一个立方体,当它的等分因子之和增加时,它就会变成一个正方形;例如,7+ (1 + 7 + 72) = 20第二,找到一个平方,当它的等分因子之和增加时,它就变成了一个立方体。我想费马知道第一个挑战的答案,但不知道第二个。

在计算机出现之前的日子里,这样的挑战经常由一位数学家或一群数学家向他们竞争的同事发出;例如,法国数学家可能会挑战德国数学家。一旦遇到挑战,解决小组将向最初的挑战者发出新的挑战。尽管费马很可能受到足够的尊重,能够逃脱惩罚,但如果你没有解决方案,那就被认为是不绅士的。时代已经改变了。

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

页:1 2

反转数字

2015年9月4日

之后星期二的练习关于Lychrel数字,我回答了一个关于Lychrl数字的问题堆栈溢出,使用递归函数逐个提取和反转数字。一位读者向我提出质疑,他声称“使用int(“”.join(反向(str(n)))必须比使用递归函数高效得多。你的功能很聪明,但聪明并不总是最好的。”当然,他错了:关于数字的算术比将数字转换为字符串要好,创建一个生成器来反转字符串中的各个字符,将它们逐个附加到新字符串中,并将新字符串转换回数字,这是我在计时实验中向他演示的。

你的任务是找到用你选择的语言反转正整数位数的最佳方法。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

Lychrel数

2015年9月1日

第页(n个)是反转数字位数的函数n个,并让(n个) =n个+第页(n个); 例如,第页(281)=182和(281) = 281 + 182 = 463. 重复应用结果(n个)经常导致回文;例如,从n个=281,(281) = 463,(463) = 827,(827) = 1555,(1555) = 7106,(7106)=13123,以及(13123)=45254,这是一个回文。有一些数字,例如196,显然不要导致回文;这些数字叫做Lychrel数(A023108号),我们之所以这么说,显然是因为如果计算持续足够远,没有人知道是否会有回文。据推测,Lychrel数是无限的。

您的任务是编写一个函数,确定某个数字是否是Lychrel数字,如果不是,则返回显示不是的数字链。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2