设为首页 加入收藏

TOP

算法学习(三)
2017-09-30 16:57:09 】 浏览:7213
Tags:算法 学习

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.约瑟夫斯问题( Josephus Problem )

说明:这是经典的编程难题,尽管它来自古。我们可以看到,练习数学和逻辑有时可以挽救一个人的生命!大约在2000年前,有一场战争,在其中一场战斗中,一方士兵被进攻一方困在了洞穴里。为了避免被捕,被困的他们决定站成一个圈,杀掉三分之一的人,直到最后一个人,本来应该自杀的人,尽管他最终还是倾向于向敌人投降。

你可能会读到Josephus的完整故事,并在维基百科上对这个问题进行数学解释。wikipedia article

你的任务是确定给定数量的N和常数K的位置,即最后一个人的位置,也就是安全的位置。例如,如果有10个人,他们会每隔3个人除去一个人。最后剩下位置在第4的人。

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
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇列表生成式 下一篇python装饰器初探

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目