给定一个数字K ,任务是找到斐波那契三角形的Kth级的数字总和。
例子:
Input: K = 3
Output: 10
Explanation:
Fibonacci triangle till level 3:
0
1 1
2 3 5
Sum at 3rd level = 2 + 3 + 5 = 10
Input: K = 2
Output: 2
Explanation:
Fibonacci triangle till level 3:
0
1 1
Sum at 3rd level = 1 + 1 = 2
方法:
- 直到第K级,即从[1,K-1]级开始,已经使用的斐波那契数的计数可以计算为:
cnt = N(Level 1) + N(Level 2)
+ N(Level 3) + ...
+ N(Level K-1)
= 1 + 2 + 3 + ... + (K-1)
= K*(K-1)/2
- 同样,我们知道Kth级将包含K个斐波那契数。
- 因此,我们可以在范围[[cnt + 1),(cnt + 1 + K)]中找到斐波那契数作为Kth级数。
- 我们可以使用Binet公式在O(1)时间范围内找到斐波那契数的总和。
下面是上述方法的实现:
C++
// C++ implementation to find
// the Sum of numbers in the
// Kth level of a Fibonacci triangle
#include
using namespace std;
#define MAX 1000000
// Function to return
// the nth Fibonacci number
int fib(int n)
{
double phi = (1 + sqrt(5)) / 2;
return round(pow(phi, n) / sqrt(5));
}
// Function to return
// the required sum of the array
int calculateSum(int l, int r)
{
// Using our deduced result
int sum = fib(r + 2) - fib(l + 1);
return sum;
}
// Function to return the sum of
// fibonacci in the Kth array
int sumFibonacci(int k)
{
// Count of fibonacci which are in
// the arrays from 1 to k - 1
int l = (k * (k - 1)) / 2;
int r = l + k;
int sum = calculateSum(l, r - 1);
return sum;
}
// Driver code
int main()
{
int k = 3;
cout << sumFibonacci(k);
return 0;
}
Java
// Java implementation to find
// the Sum of numbers in the
// Kth level of a Fibonacci triangle
import java.util.*;
class GFG
{
// Function to return
// the nth Fibonacci number
static int fib(int n)
{
double phi = (1 + Math.sqrt(5)) / 2;
return (int)Math.round(Math.pow(phi, n) / Math.sqrt(5));
}
// Function to return
// the required sum of the array
static int calculateSum(int l, int r)
{
// Using our deduced result
int sum = fib(r + 2) - fib(l + 1);
return sum;
}
// Function to return the sum of
// fibonacci in the Kth array
static int sumFibonacci(int k)
{
// Count of fibonacci which are in
// the arrays from 1 to k - 1
int l = (k * (k - 1)) / 2;
int r = l + k;
int sum = calculateSum(l, r - 1);
return sum;
}
// Driver code
public static void main(String args[])
{
int k = 3;
System.out.println(sumFibonacci(k));
}
}
// This code is contributed by AbhiThakur
Python3
# Python3 implementation to find
# the Sum of numbers in the
# Kth level of a Fibonacci triangle
import math
MAX = 1000000
# Function to return
# the nth Fibonacci number
def fib(n):
phi = (1 + math.sqrt(5)) / 2
return round(pow(phi, n) / math.sqrt(5))
# Function to return
# the required sum of the array
def calculateSum(l, r):
# Using our deduced result
sum = fib(r + 2) - fib(l + 1)
return sum
# Function to return the sum of
# fibonacci in the Kth array
def sumFibonacci(k) :
# Count of fibonacci which are in
# the arrays from 1 to k - 1
l = (k * (k - 1)) / 2
r = l + k
sum = calculateSum(l, r - 1)
return sum
# Driver code
k = 3
print(sumFibonacci(k))
# This code is contributed by Sanjit_Prasad
C#
// C# implementation to find
// the Sum of numbers in the
// Kth level of a Fibonacci triangle
using System;
class GFG
{
// Function to return
// the nth Fibonacci number
static int fib(int n)
{
double phi = (1 + Math.Sqrt(5)) / 2;
return (int)Math.Round(Math.Pow(phi, n) / Math.Sqrt(5));
}
// Function to return
// the required sum of the array
static int calculateSum(int l, int r)
{
// Using our deduced result
int sum = fib(r + 2) - fib(l + 1);
return sum;
}
// Function to return the sum of
// fibonacci in the Kth array
static int sumFibonacci(int k)
{
// Count of fibonacci which are in
// the arrays from 1 to k - 1
int l = (k * (k - 1)) / 2;
int r = l + k;
int sum = calculateSum(l, r - 1);
return sum;
}
// Driver code
public static void Main()
{
int k = 3;
Console.Write(sumFibonacci(k));
}
}
// This code is contributed by mohit kumar 29
Javascript
输出:
10