记录下用python做Fibonacci数列的题

年初辞职到现在都没有编程过了,中间有几次要用到python但又不是很急用,所以一直拖着,现在有空学习下python。

这两天熟悉了一下基本的语法,下面这是第一次用python解题。。算是熟悉下掌握语法。。

 

题目描述

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:

输入为一个正整数N(1 ≤ N ≤ 1,000,000)

输出描述:

输出一个最小的步数变为Fibonacci数"

示例

输入

15

输出

2

 

解:

n = int(input())
a = 0
b = 1
while n > b:
    a, b = b, a+b
if n - a < b - n:
    step = n - a
else:
    step = b - n
print(step)

 

### 蓝桥杯 Python 斐波那契数列及解答 蓝桥杯竞赛中涉及 Python 实现斐波那契数列目通常会考察选手对于循环、递归以及模运算的理解能力。以下是基于引用内容中的相关内容,提供的一道典型真及其解答。 #### 目描述 给定正整数 \( n \),求第 \( n \)Fibonacci 数列的值,并对结果取模 10007 输出最终答案[^4]。 #### 输入格式 输入一个正整数 \( n \) (其中 \( 1 \leq n \leq 10^6 \))。 #### 输出格式 输出第 \( n \)Fibonacci 数列的结果并对 10007 取模后的数值。 --- #### 解分析 为了高效解决此问,可以采用迭代方而非递归来计算 Fibonacci 数列。原因在于递归方式的时间复杂度较高 (\( O(2^n) \)),而迭代方仅需线性时间复杂度 (\( O(n) \)) 和常量空间复杂度 (\( O(1) \))。 具体实现如下: 1. 初始化两个变量 `a` 和 `b` 表示前两项 Fibonacci 数列的初始值。 2. 使用循环逐步更新当前项和下一项的值,直到达到目标位置 \( n \)。 3. 对每次计算结果取模 10007,以防止溢出并满足目要求。 --- #### Python 实现代码 ```python n = int(input()) a, b = 1, 1 # 初始条件:F(1)=1, F(2)=1 for i in range(2, n): # 循环从第三项开始 a, b = b, (a + b) % 10007 # 更新状态并取模 print(b) ``` 上述代码通过简单的迭代实现了高效的 Fibonacci 计算过程,并利用了取模操作来优化存储需求。 --- #### 测试样例 | **输入** | **输出** | |----------|----------| | 1 | 1 | | 2 | 1 | | 10 | 55 | 测试说明:当输入为 1 或 2 时,由于初始化已设定为 1,因此无需额外处理;而对于更大的 \( n \),程序能够正确返回对应的 Fibonacci 值并完成取模操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值