在系列到达1随后,连串就会减小

1.考拉兹估摸(Collatz Sequence)

评释:倘诺大家挑选了一部分发端数字X,然后依照以下规则构建值连串:

if X is even (i.e. X modulo 2 = 0) then
    Xnext = X / 2
else
    Xnext = 3 * X + 1

也正是说,假诺X是奇数,那么类别就会扩展,假如是偶数,种类就会削减。例如,X=15时,我们有系列:

15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1

在种类到达1随后,它进入循环1 4 2 1 4 2 1……

您的天职是计量给定的数字来测算要求有个别步才能到达1。

Input data :第②行中带有的测试用例数,

其次行李包裹括测试用例,即应当执行的总计值,

Answer 应该包括相同数量的结果,每一种结果都以将Collatz系列变成1的步骤数。

input data:
3
2 15 97

answer:
1 17 118

算法如下:

 1 Arrays = [2, 15, 97]
 2 
 3 def collatz_sequence(x):
 4     """构造函数计算单个数字的步骤数"""
 5     seq = [x]
 6     while seq[-1] > 1:
 7        if x % 2 == 0:
 8          seq.append(x/2)
 9        else:
10          seq.append(3*x+1)
11        x = seq[-1]
12     return seq
13 
14 for i in range(len(Arrays)):
15     print((len(collatz_sequence(Arrays[i])) - 1), end=' ')
16 
17 # 输出 1 17 118

算历史学习(三),算法学习

2.Joseph斯难点( Josephus Problem )

表明:那是经典的编制程序难点,尽管它来自古。大家得以见见,演练数学和逻辑有时能够弥补壹位的生命!大概在3000年前,有一场战争,在其间一场战斗中,一方士兵被出击一方困在了岩洞里。为了制止被捕,被困的他们操纵站成多少个圈,杀掉叁分一的人,直到最后1个人,本来应该自杀的人,就算她最终仍然帮忙于向仇敌退让。

您可能会读到Josephus的共同体传说,并在维基百科上对那几个题材举办数学解释。wikipedia
article

您的天职是分明给定数据的N和常数K的职位,即最后壹个人的地方,相当于安全的地方。例如,倘若有十二个人,他们会每隔三个人除了1个人。最后剩余地点在第肆的人。

N = 10, K = 3
1st round: 1 2 (3) 4 5 (6) 7 8 (9) 10
2nd round:                            1 (2) 4 5 (7) 8 10
3rd round:                                                (1) 4 5 (8) 10
4th round:                                                               4 (5) 10
5th round:                                                                        4 (10)

Input data 包括人口N和间隔数k的,

Answer 应该蕴涵最终留下的人的岗位数,开端编号从1开端。

算法代码:

Arrays = [75, 8]

N = Arrays[0]
K = Arrays[1]

def f(n, k):
    if n == 1:
        return 1 # 当只有1人的时候,返回1.
    return ((f(n-1, k) + (k - 1)) % n) + 1

print(f(N, K))
# 输出62

1.考拉兹估计(Collatz Sequence)

表明:要是我们挑选了部分方始数字X,然后依照以下规则塑造值体系:

if X is even (i.e. X modulo 2 = 0) then
    Xnext = X / 2
else
    Xnext = 3 * X + 1

也便是说,假若X是奇数,那么体系就会扩张,假使是偶数,体系就会回落。例如,X=15时,大家有种类:

15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1

在类别到达1之后,它进入循环1 4 2 1 4 2 1……

您的天职是计量给定的数字来测算须要有个别步才能到达1。

Input data :第贰行中带有的测试用例数,

其次行李包裹罗测试用例,即应当实施的计算值,

Answer 应该包涵相同数量的结果,每一种结果都以将Collatz连串变成1的步骤数。

input data:
3
2 15 97

answer:
1 17 118

算法如下:

 1 Arrays = [2, 15, 97]
 2 
 3 def collatz_sequence(x):
 4     """构造函数计算单个数字的步骤数"""
 5     seq = [x]
 6     while seq[-1] > 1:
 7        if x % 2 == 0:
 8          seq.append(x/2)
 9        else:
10          seq.append(3*x+1)
11        x = seq[-1]
12     return seq
13 
14 for i in range(len(Arrays)):
15     print((len(collatz_sequence(Arrays[i])) - 1), end=' ')
16 
17 # 输出 1 17 118

2.Joseph斯难题( Josephus Problem )

申明:那是经典的编制程序难点,固然它来自古。大家能够看看,练习数学和逻辑有时能够挽救1位的生命!差不离在两千年前,有一场战争,在中间一场交锋中,一方士兵被出击一方困在了山洞里。为了防止被捕,被困的他们说了算站成一个圈,杀掉1/3的人,直到最终1位,本来应该自杀的人,即使他最终照旧倾向于向冤家妥洽。

你或许会读到何塞普hus的总体旧事,并在维基百科上对那个难点进行数学解释。wikipedia
article

你的天职是规定给定数据的N和常数K的地方,即最终壹位的岗位,也正是安全的岗位。例如,倘若有九位,他们会每隔肆个人除了一个人。最终剩余地点在第陆的人。

N = 10, K = 3
1st round: 1 2 (3) 4 5 (6) 7 8 (9) 10
2nd round:                            1 (2) 4 5 (7) 8 10
3rd round:                                                (1) 4 5 (8) 10
4th round:                                                               4 (5) 10
5th round:                                                                        4 (10)

Input data 包括人口N和间隔数k的,

Answer 应该包蕴最终留给的人的岗位数,先河编号从1起来。

算法代码:

Arrays = [75, 8]

N = Arrays[0]
K = Arrays[1]

def f(n, k):
    if n == 1:
        return 1 # 当只有1人的时候,返回1.
    return ((f(n-1, k) + (k - 1)) % n) + 1

print(f(N, K))
# 输出62

http://www.bkjia.com/Pythonjc/1222643.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1222643.htmlTechArticle算法学习(三),算法学习 1.考拉兹估摸(Collatz
Sequence)
表达:假诺大家接纳了一部分始发数字X,然后遵照以下规则营造值系列: if X is
ev…

相关文章