Outra solução para um exercício do BEECROWD! O exercício Fibonot não é tão simples assim! Ao menos não no meu ponto de vista. Precisei pensar uns minutinhos até entender como fazer. Resolvi nas mesmas linguagens que costumo fazer, C e C++. Observe os códigos abaixo!
Plataforma: URI (BEECROWD)
Problema: 2846
Linguagens: C e C++
Solução:
Um dos pontos importantes nessa solução foi utilizar o tipo long long, pois o range de valores de n pode ser muito grande. Criei uma função isFibo para fazer os cálculos da questão e verificar se o valor faz parte da sequência. Se fizer, incrementa o valor de i.
Código em C:
#include <stdio.h> #include <math.h> int isFibo(long long n) { long long raiz1 = 5 * n * n + 4; long long raiz2 = 5 * n * n - 4; long long a = sqrt(raiz1); long long b = sqrt(raiz2); return a * a == raiz1 || b * b == raiz2; } int main() { long long n, i = 1, r = 0; while (scanf("%lld", &n) != EOF) { while (n >= i) { if (!isFibo(++r)) { i++; } } printf("%lld\n", r); } return 0; }
#include <iostream> #include <cmath> using namespace std; bool isFibo(long long n) { long long raiz1 = 5 * n * n + 4; long long raiz2 = 5 * n * n - 4; long long a = sqrt(raiz1); long long b = sqrt(raiz2); return a * a == raiz1 || b * b == raiz2; } int main() { long long n, i = 1, r = 0; while (cin >> n) { while (n >= i) { if (!isFibo(++r)) { i++; } } cout << r << endl; } return 0; }
Nenhum comentário:
Postar um comentário