每周挑战223
每周穆罕默德·S·安瓦尔(Mohammad S.我的解决方案首先用Python编写,然后转换为Perl。这是我们所有人练习一些编码的好方法。
任务1:计数素数
任务
您有一个正整数,$n
。
编写一个脚本以查找小于或等于给定整数的总数。
我的解决方案
这几乎与挑战198的second task几乎是一项相同的任务。唯一的区别是,挑战是计数小于$n
的值,而该值小于或等于该值。
因此,我复制并粘贴了该代码,并将计数器更改为包括提供的编号。
例子
$ ./ch-1.py 10
4
$ ./ch-1.py 1
0
$ ./ch-1.py 20
8
任务2:框硬币
任务
您有一个代表盒子硬币的数组, @box。
写一个脚本以收集最大硬币,直到取出所有盒子。如果我们选择盒子[i],我们会收集硬币$box[i-1] * $box[i] * $box[i+1]
。如果$box[i+1]
或$box[i-1]
不合时宜,则将其视为1个硬币。
我的解决方案
为了解决这一挑战,我具有称为collect_coins
的递归功能。它获取了coins
的列表(perl中的数组)。如果只剩下一枚硬币,我会退货。
如果有多个硬币,我使用变量i
循环从0到1个硬币的位置。对于每次迭代,我计算硬币的数量
collect = coins[i]
if i > 0:
collect *= coins[i-1]
if i < remaining_coins - 1:
collect *= coins[i+1]
并通过删除该硬币再次调用该功能。
new_coins = coins.copy()
del new_coins[i]
collect += collect_coins(new_coins)
i然后将此分数记录在集合列表中。该功能返回最大收集分数。
例子
$ ./ch-2.py 3 1 5 8
167
$ ./ch-2.py 1 5
10