DaniloMasters 0 Denunciar post Postado Janeiro 31, 2008 Eu entrei na net e me deparei com o seguinte desafio que não consegui até hoje resolver: No futebol americano, as equipes brigam por espaço em campo e fazem pontos de duas formas diferentes: através do touchdown, que pode valer 6 ou 7 pontos e através do chute ao gol, que vale 3 pontos. Quando uma equipe entra na área de touchdown do adversário, ela pontua imediatamente 6 pontos e tem direito a um chute ao gol que vale 1 ponto extra. Enfim, os placares dos jogos são montados pela possibilidade de fazer 3, 6 ou 7 pontos, o que significa que alguns placares são impossíveis de acontecer como fazer 5, 13 ou 22 pontos. Alguem sabe algum algoritmo para determinar se é possível ou não para esta ocasião? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Fevereiro 1, 2008 Uma idéia seria descartar o 6, pois ele é divisível por 3 e ir acumulando uma variável de 3 em 3. Se não bater o resultado zere o acumular, acrescente 7 e volte a acumular de 3 em 3. Ex: 13 é um placar válido? 3 + 3 + 3 + 3 + 3 passou de 13 zere o acumulador e acrescente 7 7 + 3 + 3 achou o resultado O placar é válido. Essa é a idéia, se tiver dificuldades em codificar continue a postar. Compartilhar este post Link para o post Compartilhar em outros sites
DaniloMasters 0 Denunciar post Postado Fevereiro 1, 2008 Muito Obrigado, me ajudou na lógica do pensamento, porém alguns resultados como 200 ele retorna como falso, porém é um resultado possivel sendo 20 vezes marcados 7 pontos e mais 20 vezes três pontos. Você saberia como resolver este problema? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Fevereiro 1, 2008 Esse placar pode ser 62 x 3 e 2 x 7 O algoritmo proposto fará assim. Não tem como acertar exatamente a quantidade de 7 pontos, pois existem várias combinações para um mesmo placar. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Fevereiro 1, 2008 olha vendo assim você disse q é impossivel o placar dar 13.. e c o cara fizer 2 touchdown e em apenas 1 ele conseguir o ponto extra? 6+7 = 13 Compartilhar este post Link para o post Compartilhar em outros sites
Raphael_Suporte 0 Denunciar post Postado Fevereiro 1, 2008 olha vendo assim você disse q é impossivel o placar dar 13.. e c o cara fizer 2 touchdown e em apenas 1 ele conseguir o ponto extra? 6+7 = 13 ele não falou que era impossivel o placar 13 mas sim com apenas o valor 3 chegar as treze, e assim o contador teria que usar o auxilio do 7, referente ao 200 pode ser que ao zerar o valor 3 ele deve ter preenchido tudo com o 7 e não usado o 7 para completar só uma pergunta você vai digitar o valor do placar correto será que não ficaria mais facil fazer assim? se resultado mod 7 = 0 ou resultado mod = 0 então resultado é possivel senao aux <- resultado mod 7 se aux mod 3 = 0 então resultado possivel senão resultado impossivel end-se end-se Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Fevereiro 1, 2008 Entendi sua dificuldade, vou dar mais um exemplo. Vamos testar se 20 é um placar válido. 3 + 3 + 3 + 3 + 3 + 3 + 3 passou, então zero e somo 1x7 o 1 significa o número de tentativas. 7 + 3 + 3 + 3 + 3 + 3 passou, então zero e somo 2x7 14 + 3 + 3 agora sim. esse placar é válido. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Raphael_Suporte 0 Denunciar post Postado Fevereiro 1, 2008 kandrade o jeito que eu fiz usando o if seria menos complicado não acha?? Compartilhar este post Link para o post Compartilhar em outros sites
sublyer 0 Denunciar post Postado Fevereiro 1, 2008 Olá, estou movendo o tópico para o fórum adequado. Java Server Pages / Java http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Lógica de Programação e Algoritmos Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Fevereiro 1, 2008 Aparentemente sim, mas fazendo um teste de mesa. 16 é válido? 7 + 3 + 3 + 3 sim. pelo algoritmo: 2 mod 3 aux mod 3 caiu no senao e o resultado não foi o correto. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif kandrade o jeito que eu fiz usando o if seria menos complicado não acha?? Compartilhar este post Link para o post Compartilhar em outros sites
Raphael_Suporte 0 Denunciar post Postado Fevereiro 1, 2008 então poderia criar mais um if ou ficaria pessado?? tipo se resultado mod 7 = 0 ou resultado mod = 0 então resultado é possivel senao aux <- (resultado mod 7) se aux mod 3 = 0 então resultado possivel senão if aux <- ((resultado mod 7) - 7) se aux mod 3 = 0 então resultado possivel senão resultado impossivel end-se end-se end-se Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Fevereiro 1, 2008 Usando o mesmo exemplo acima aux ficaria com valor negativo. aux <- 2 - 7 Só com if não sei se é possível resolver. Acho que será necessário acrescentar estrutura de repetição. Também acho que a matemática pode ajudar. Algo sobre permutação ou análise combinatória. Se tiver algum meio matemático podemos tentar codificar. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Raphael_Suporte 0 Denunciar post Postado Fevereiro 1, 2008 verdade, eu pensei em uma coisa mas não consegui me expressar... no caso do 16 ele divido por 3 ou 7 não chega ao resto 0, então eu dividiria ele por 7 e me retornaria o valor de 2 para o aux.. que tb não é divisível por 3 então eu tentei foi pegar o resultado da divisão de aux mod 7 que no caso é o resto da divisão de 16 por 7 ou seja 2 e voltar com mais 7, acho que ai que eu errei pois eu diminui e tinha que somar, pq esse erro pode acontecer com os números combinados que sobrem 2 na divisão por 7 então se eu trocar o sinal de " - " para " +" deve funcionar Compartilhar este post Link para o post Compartilhar em outros sites
supino 0 Denunciar post Postado Fevereiro 6, 2008 tentei esse algoritmo mas nem testei.. atualizado.. int multsete, multtres; multisete = 1; multitres = 0; entrada = 32 if(entrada mod 3 = 0){ return true; }elseif(entrada mod 7 = 0){ return true; }else{ while((multsete * 7) < entrada){ multitres = entrada - (multisete*7) / 3; //acha um multitres aproximado do valor de entrada while( (multisete*7+multitres*3) < entrada ){ if( (multisete*7+multitres*3) = entrada ){ return true; } ++multitres; } ++multisete; multitres = 1; } return false; } Compartilhar este post Link para o post Compartilhar em outros sites