Outro exercício envolvendo Fibonacci

Inicio recomendo a leitura do post anterior (Mais do que simplesmente Fibonacci), onde explico o que é a sequência de Fibonacci. Naquele algoritmo não era necessário o uso de um vetor para armazenamento dos valores da sequência. Nesse enunciado a utilização de um vetor já se mostra necessária.

Enunciado: elabore um algoritmo que leia um valor k, onde k é o número de termos da sequência. Por exemplo, se o valor de k for 8, o termos serão 0, 1, 1, 2, 3, 5, 8, 13. O algoritmo deverá mostrar quantos valores estão acima da média dos valores da sequência, qual a mediana com uma casa decimal apenas (veja como calcular aqui) e também mostrar os 3 últimos valores da sequência de trás para frente (do maior para o menor). Cada valor deve ser separado por um espaço em branco.

Exemplos

Entrada: 10
Saída: 3 4.0 34 21 13

Entrada: 5
Saída: 2 1.0 3 2 1

Solução em C/C++

#include <stdio.h>
 
int main(void) {
	int k, i, termo, par, soma=1;
	scanf("%i", &k);
	int vet[k];
	float media;
 
 	vet[0] = 0;
 	vet[1] = 1;
	for (termo=2; termo<k; termo++) {
		vet[termo] = vet[termo-1] + vet[termo-2];

		soma+=vet[termo];
	} 

	//mostra os valores da sequência
	for (i=0; i<k; i++) {
		printf("%i ", vet[i]);
	}
 
 	media = soma/(float)k;
	printf("\nSoma: %i \nMedia: %f", soma, media);
 
 	//valores acima da media
 	int maioresMedia = 0;
	for (i=0; i<k; i++) {
		if (vet[i] > media) {
			maioresMedia++;
		}
	}
	printf("\n\nValores acima da media: %i", maioresMedia);
	
	//mostra mediana
	if (k%2 == 0) { //mediana nao fica exatamente no meio
		printf("\nMediana1: %.1f", (vet[(int)k/2]+vet[(int)k/2-1]) / 2.0);
	} else {
		printf("\nMediana2: %i", vet[(int)k/2]);
	}
	
	printf("\nUltimos valores: %i %i %i", vet[k-1], vet[k-2], vet[k-3]);
	
	return 0;
}

Teste o código: http://ideone.com/grHJJL

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.