Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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?
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.
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
>
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
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
kandrade o jeito que eu fiz usando o if seria menos complicado não acha??
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
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??
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
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
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
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( (multisete7+multitres3) < entrada ){
if( (multisete7+multitres3) = entrada ){
return true;
}
++multitres;
}
++multisete;
multitres = 1;
}
return false;
}
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.