Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Noite Pessoal
Comecei na faculdade a estudar C++. Resolvi então, praticar em casa para nao ficar totalmente boiando nas aulas hehe porém estou com dificuldade em um exercício e não consigo pensar em uma solução para ele, eu sei que pode ser bem simples mas não me vem nenhuma idéia na cabeça.
A questão é:
Faça uma função que determina em uma lista de n números o maior múltiplo de 5.
Quem puder me ajudar ficarei grato.
Obrigado
Felipe
Cara... teu problema não era com haskell?
É com Java também:
http://forum.imasters.com.br/index.php?/topic/389801-exercicio/
Vou trancar aquele tópico.
Não abra vários tópicos com a mesma dúvida. Algorítmo é algorítmo, não importa a linguagem.
Uma opção é fazer um loop percorrendo toda a lista verificando se o número é múltiplo de 5. Se for você armazena o valor numa variável. Para cada número múltiplo de 5 você verifica se ele é maior que o número armazenado na variável. Se for você substitui. Ao final do loop você terá o resultado.
Se quiser você pode fazer como o Beraldo sugeriu: dividindo o problema em duas partes. Apesar de ser uma boa prática de programação, creio que não se aplica a este caso devido à simplicidade do problema. E se for pensar em performance é melhor fazer tudo de uma vez.
Não lembro C então vai Portugol.
// corpo do método
var maior : inteiro
maior <- 0
para indice = 1 ate tamanhoLista faca
inicio
se lista[indice] mod 5 == 0 entao
inicio
se maior < lista[indice] entao
maior <- lista[indice]
fim se
fim para
É mais ou menos por aí. A idéia é esta. Descubra o resto.
O problema de definir maior como zero são os números negativos.
E também é necessário pensar no caso da lista não ter nenhum múltiplo de 5.
#include <stdio.h>
int main() {
int maior_idx = -1;
int first = 1;
int lista[] = {-34,-56,12,-9,-19,39,59,98,2,76,-183,49,389,17,187,572,342,-83,-456};
for(int i = 0; i < sizeof(lista)/sizeof(int); i++) {
if (! (lista[i]%5) ) {
if (first) {
maior_idx = i;
first = !first;
} else {
if (lista[i] > lista[maior_idx])
maior_idx = i;
}
}
}
if (maior_idx == -1)
puts("Não há nenhum multiplo de 5 na lista.");printf("Maior: %d\n",lista[maior_idx]);
return 0;
}Mas não fique restrito à sintaxe do C. Mexa nos headers próprios do C++:
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
bool multFive(int i) {
return (i%5 == 0);
}
int main() {
bool first = true;
bool has = false;
int lista[] = {-34,-56,12,-5,9,-19,39,59,98,2,76,45,-183,49,389,1755,187,572,90,342,-83,-456};
vector<int> varr(lista, lista + sizeof(lista)/sizeof(int));
vector<int>::iterator it = varr.begin();
vector<int>::iterator maior_idx;
for(; it < varr.end(); advance(it,1)) {
it = find_if(it, varr.end(), multFive);
if (it < varr.end()) {
if (first) {
maior_idx = it;
first = !first;
has = !has;
} else {
if (*it > *maior_idx)
maior_idx = it;
}
}
}
if (has)
cout << *maior_idx;
return 0;
}
Divida o problema em dois:
1. Maior número em um array
2. Divisibilidade
Para encontrar o maior número de um array, basta uma pesquisa no Todo Poderoso Google
Ser divisível significa que o resto da divisão é zero. Ou seja, X é divisível por 5 se X % 5 == 0