Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DaniloMasters

Desafio de Lógica

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.