17 条题解
-
13李奕达 LV 10 @ 2017-10-20 16:18:22
三行代码过斐波那契数列!!!
n=int(input()) a=[1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040] print(a[n-1])
-
72017-10-20 16:28:58@
高端操作之函数递归
def fb(n): if n==1 or n==2: return 1 else: return fb(n-1)+fb(n-2) n=int(input()) print(fb(n))
-
42019-10-31 21:46:03@
通项公式法...
n = int(input()) a = 5**(0.5)/5 b = ((1+5**(0.5))/2)**(n) c = ((1-5**(0.5))/2)**(n) d = a*(b-c) print(int(d))
-
22024-01-02 17:23:27@
n = int(input()); print(int((1/5**0.5)*(((1+5**0.5)/2)**n - ((1-5**0.5)/2)**n)))
-
22023-09-23 21:35:07@
事实上打表还可以压行。。。
两行就够l=[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040] print(l[int(input())])
-
22019-04-15 21:40:35@
通项公式考虑一下吧
就不写了 -
12023-09-08 17:32:04@
用空间换时间
直接打表n = eval(input()) - 1 a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040] print(a[n])
-
12020-09-16 23:04:15@
#python3
n=int(input()) while(1): if n<1 or n>30: n=int(input()) else: break b=((1+5**0.5)/2)**n c=((1-5**0.5)/2)**n d=(5**0.5) a=(b-c)/d print(int(a))
-
12019-04-15 21:39:22@
n=int(input())
x=1
y=0
while n>0:
if x>=y:
y=x+y
if x<y:
x=x+y
n=n-2
if x>=y:
if n==0:
print(x)
else:
print(y)
if x<y:
if n==0:
print(y)
else:
print(x) -
12019-04-14 19:49:57@
高端操作之函数递归的c++版本
#include <iostream> #include <stdlib.h> #include <iomanip> #include <cmath> using namespace std; int fibe(int n) { if(n == 1 || n == 2) { return 1; } else { return fibe(n - 1) + fibe(n - 2); } } int main() { int n; cin >> n; int ans; ans = fibe(n); cout << ans; return 0; }
-
02020-07-22 14:55:28@
n=int(input())
a=1
b=1
c=1
for i in range(n-2):
c=a+b
a=b
b=c
print(c)
好像和别人的不太一样? -
02020-01-28 16:23:37@
a=int(input())
def num(x):
if x==1 or x==2:
return 1
else:
return num(x-1)+num(x-2)
print(num(a)) -
02019-03-03 11:16:37@
n=int(input())
a=1
b=1
if n==1 or n==2:
print(a)
else:
for i in range(3,n+1):
c=a+b
a=b
b=c
print(c) -
02019-02-13 20:17:35@
#include<iostream>
using namespace std;
int a[10000]={1,1};
int main()
{
int k;
cin>>k;
for(int i=2;i<=k-1;i++)
a[i]=a[i-1]+a[i-2];
cout<<a[k-1];
} -
-32018-04-13 09:56:19@
此题算法复杂度可以降到1...上面递归的太慢...
首先分析数列f(n+2)=f(n+1)+f(n),f(1)=f(2)=1;
我们易得出特征根方程:x^2=x+1,解为a,b,则有f(n)=c*a^n+d*b^n。
其中c,d为参数,将方程代入f(1)=f(2)=1即可解出。
因此列程序:#include <stdio.h> #include <stdlib.h> #include <math.h> int f(int n){ if(n==1)return 1; double a=(sqrt(5.0)+1.0)/2.0; double b=(sqrt(5.0)-1.0)/2.0; double r=((pow(a,n)-pow(b,n))/(sqrt(5.0))+0.5); return (int)r; } int main(int argc, char* argv[]) { int n; scanf("%d",&n); printf("%d",f(n)); return 0; }
-
-62017-10-16 16:57:59@
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int F[46+7];
int k;
cin>>k;
memset(F,0,sizeof(F));
F[1]=1;F[2]=1;
for(int i=3; i<=k;i++){
F[i]=F[i-1]+F[i-2];
}
cout<<F[k];
return 0;
} -
-72017-10-16 20:46:55@
A=int(input())
b1,b2=1,1
for i in range(A-2):
b1,b2=b2,b1+b2
print(b2)
- 1
信息
- 难度
- 3
- 分类
- (无)
- 标签
- (无)
- 递交数
- 2270
- 已通过
- 655
- 通过率
- 29%
- 被复制
- 1
- 上传者