python高级练习题:与在Collat​​z启动模式号码【难度:4级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

python高级练习题:与在Collat​​z启动模式号码【难度:4级】:

背景

著名的在Collat​​z序列与以下规则产生:

  • 开始与一个正整数一个[0] = N.
  • 如果A [1]是偶数,A [1 + 1] = A [1] / 2.
  • 否则,A [1 + 1] = A [1] * 3 + 1.

然而,对于这个习题的目的,我给一个** 略作修改的定义**:

  • 如果A [1]是偶数,A [1 + 1] = A [1] / 2.这一步是降压,或’D’.
  • 否则,A [1 + 1] =(A [1] * 3 + 1)/ 2.该步骤是一个升压,或U.

此外,对于任何起始数量,可无限制地产生的序列,在1中未结束.

问题描述

对于任何给定的起始编号,我们可以从它记录的步骤的类型('D’或’U`).
例如,如果我们开始用数字11,在Collat​​z步骤是这样的:


一个[0] = 11
一个[1] =(11 * 3 + 1)/ 2 = 17  - >û
一个[2] =(17 * 3 + 1)/ 2 = 26  - >û
[3] = 26/2 = 13  - > d
一个[4] =(13 * 3 + 1)/ 2 = 20  - >û
一个[5] = 20/2 = 10  - > d
一个[6] = 10/2 = 5  - > d
一个[7] =(5 * 3 + 1)/ 2 = 8  - >û
一个[8] = 8/2 = 4  - > d
一个[9] = 4/2 = 2  - > d
一个[10] = 2/2 = 1  - > d
一个[11] =(1 * 3 + 1)/ 2 = 2  - >û
一个[12] = 2/2 = 1  - > d
...


11  - > 17  - > 26  - > 13  - > 20  - > 10  - > 5  - > 8  - > 4  - > 2  - > 1  - > 2  - > 1  - > ...
   U U düd düd d düd

基于以上示出的步骤,11的前四个步骤在Collat​​z是UUDU.
另外,107是超过100,其在Collat​​z步骤开始UUDU最小数量,并且
1003是以财产最小数超过1000个.

一个特殊的例子是数字1,它可以产生任何数量的UD``.

找出最小的整数大于或等于N其在Collat​​z步骤开始给定的字符串steps.

约束

1 <= N <= 10 ** 9

N始终是一个有效的整数.

1 <=长度(步骤)<= 25

steps将完全由Us和Ds的`字符串’.

例子

collat​​z_steps(1, 'UUDU')== 11
collat​​z_steps(100, 'UUDU')== 107
collat​​z_steps(1000, 'UUDU')== 1003

collat​​z_steps(1, 'UD')== 1
collat​​z_steps(1, 'UDUD')== 1
collat​​z_steps(1, 'UDUDUD')== 1

collat​​zSteps(1, 'UUDU')== 11
collat​​zSteps(100, 'UUDU')== 107
collat​​zSteps(1000, 'UUDU')== 1003

collat​​zSteps(1, 'UD')== 1
collat​​zSteps(1, 'UDUD')== 1
collat​​zSteps(1, 'UDUDUD')== 1

提示

如果你是完全丢失,通过回答以下问题开始:

  • 施加给定的步骤(例如UUDU)于初始数字x后,
      你得到了什么分数?
      
    在这之后,你可能会想学习有关[模逆(https://en.wikipedia.org/wiki/Modular_multiplicative_inverse).

确认

(https://projecteuler.net/problem=277):这个问题是由[A改性在Collat​​z序列项目欧拉#277]的启发.

如果你喜欢这个习题,还请看看[我的其他Katas(https://www.codewars.com/users/Bubbler/authored)!

编程目标:

def collatz_steps(n, steps):
    # Your Code Here
    pass


测试样例:

test.it('Basic Tests')
test_data = [
    ((1, 'UUDU'), 11),
    ((100, 'UUDU'), 107),
    ((1000, 'UUDU'), 1003),
    ((1, 'UD'), 1),
    ((1, 'UDUD'), 1),
    ((1, 'UDUDUD'), 1)
]


最佳答案(多种解法):

点击查看答案

更多关联题目:

python基础练习题:取消最低【难度:1级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:reverseIt【难度:1级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:惯性数组矩阵【难度:1级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:海盗!是大炮准备好了!?【难度:0级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:最佳停车位【难度:2级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

交流讨论:

Python基础训练营景越Python基础训练营QQ群
在这里插入图片描述
欢迎各位同学加群讨论,一起学习,共同成长!

免责申明:

本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars.com/
https://www.codewars.com/kata/numbers-with-collatz-starting-patterns

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值