FelipeRj 0 Denunciar post Postado Abril 5, 2010 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 Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 5, 2010 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 Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 5, 2010 Cara... teu problema não era com haskell? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 5, 2010 É 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. Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Abril 6, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Abril 6, 2010 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."); else printf("Maior: %d\n",lista[maior_idx]); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Abril 6, 2010 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; } Compartilhar este post Link para o post Compartilhar em outros sites