Ir para conteúdo

POWERED BY:

Arquivado

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

JQuadros

Algoritmo do macaco

Recommended Posts

06) Em uma ilha deserta havia cinco homens e um macaco. Durante o dia os homens colheram cocose deixaram a partilha para o dia seguinte. Durante a noite, um dos homens acordou e resolveu pegar asua parte. Dividiu a pilha de cocos em cinco partes iguais, observou que sobrava um coco, deu essecoco para o macaco, retirou e guardou a sua parte. Mais tarde, o segundo homem acordou e fez amesma coisa que o primeiro, dando também um coco para o macaco. Sucessivamente, cada um dostrês homens restantes fez o mesmo que os outros dois, isto é, dividindo os cocos existentes em cincopartes iguais, dando um coco para o macaco e guardando a sua parte. No dia seguinte, os cincohomens repartiram os cocos em cinco partes iguais, observaram que não sobrou nenhum coco. Se C éo menor número de cocos que a pilha inicial poderia ter, qual o menor valor de C para a quantidade dehomens informados pelo usuário?a) TarefaSua tarefa é escrever um programa que recebe como entrada várias quantidades de homens(K) ede cocos©, e responder, de acordo com esses valores, se é possível a divisão.B) Exemplo de entrada25 311 23121 520 3c) Saída de DadosPara cada conjunto de teste da entrada seu programa deve produzir três linhas na saída. Aprimeira linha deve conter um identificador do conjunto de teste, no formato “Teste n”, onde n énumerado a partir de 1. Na segunda linha deve aparecer resposta, no formato “É possível fazer adivisão” ou “Não é possível fazer a divisão”. A terceira linha deve ser 3 deixada em branco. Agrafia mostrada no exemplo de saída, abaixo, deve ser seguida rigorosamente (note que não sãousados acentos).Teste 1É possível fazer a divisãoTeste 2É possível fazer a divisãoTeste 3Não é possível fazer a divisãoTeste 4É possível fazer a divisão(esta saída corresponde ao exemplo de entrada acima)4. Restrições1 <= K <= 100000 <= c <= 500K=0 e C=0 apenas para indicar o fim dos dados de entrada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu entender a parte dos cocos.rsVamos supor que tenha 26 cocos e 5 homens.o primeiro faz:5 pilhas de 5 cocos e dá um pro macaco.o segundo faz:???5 pilhas de 4 cocos?explica melhor essa parte por favor!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu entender a parte dos cocos.rsVamos supor que tenha 26 cocos e 5 homens.o primeiro faz:5 pilhas de 5 cocos e dá um pro macaco.o segundo faz:???5 pilhas de 4 cocos?explica melhor essa parte por favor!!!

isso parece a utilização de um FATORIAL na pratica. ^^5x4x3x2x1^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigido06) Em uma ilha deserta havia cinco homens e um macaco. Durante o dia os homens colheram cocose deixaram a partilha para o dia seguinte. Durante a noite, um dos homens acordou e resolveu pegar asua parte. Dividiu a pilha de cocos em cinco partes iguais, observou que sobrava um coco, deu essecoco para o macaco, retirou e guardou a sua parte. Mais tarde, o segundo homem acordou e fez amesma coisa que o primeiro, dando também um coco para o macaco. Sucessivamente, cada um dostrês homens restantes fez o mesmo que os outros dois, isto é, dividindo os cocos existentes em cincopartes iguais, dando um coco para o macaco e guardando a sua parte. No dia seguinte, os cincohomens repartiram os cocos em cinco partes iguais, observaram que não sobrou nenhum coco. Se C éo menor número de cocos que a pilha inicial poderia ter, qual o menor valor de C para a quantidade dehomens informados pelo usuário?a) TarefaSua tarefa é escrever um programa que recebe como entrada várias quantidades de homens(K) ede cocos©, e responder, de acordo com esses valores, se é possível a divisão.B) Exemplo de entrada25 311 23121 520 3c) Saída de DadosPara cada conjunto de teste da entrada seu programa deve produzir três linhas na saída. Aprimeira linha deve conter um identificador do conjunto de teste, no formato “Teste n”, onde n énumerado a partir de 1. Na segunda linha deve aparecer resposta, no formato “É possível fazer adivisão” ou “Não é possível fazer a divisão”. A terceira linha deve ser 3 deixada em branco. Agrafia mostrada no exemplo de saída, abaixo, deve ser seguida rigorosamente (note que não sãousados acentos).Teste 1É possível fazer a divisãoTeste 2É possível fazer a divisãoTeste 3Não é possível fazer a divisãoTeste 4É possível fazer a divisão(esta saída corresponde ao exemplo de entrada acima)1 <= K <= 100000 <= c <= 500K=0 e C=0 apenas para indicar o fim dos dados de entrada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu entender a parte dos cocos.rsVamos supor que tenha 26 cocos e 5 homens.o primeiro faz:5 pilhas de 5 cocos e dá um pro macaco.o segundo faz:???5 pilhas de 4 cocos?explica melhor essa parte por favor!!!

o segundo faz 4 pilhas de coco e ainda 1 para o macaco. até que na divisão não tenha como ser real e seja interia .. resumindo, não sobre mais coco para o macaco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu entender a parte dos cocos.rsVamos supor que tenha 26 cocos e 5 homens.o primeiro faz:5 pilhas de 5 cocos e dá um pro macaco.o segundo faz:???5 pilhas de 4 cocos?explica melhor essa parte por favor!!!

isso parece a utilização de um FATORIAL na pratica. ^^5x4x3x2x1^^
tentei fazer o algoritmo. mas está uito dificil o entendimento da leitura do alg.... se alguem puder me ajudar a enteder melhor como devo colocar esses processamentos.olha ai como está.
vark, c, i : inteiroexecuta : logicoinicio// Seção de Comandosexecuta <- verdadeirok <- -1c <- -1enquanto ((k <> 0) e (c <> 0)) faca   escreval("Informe o número de côcos:")   leia©   escreval("Informe o número de homens:")   leia(k)   se  (k > 10000) e (c > 500) ou (k = 0) e (c = 0) entao	  executa <- falso   fimse   se executa = verdadeiro entao	  i <- i + 1	  se (((c-k)/k) / k) = 0 entao		 escreval("Teste ", i)		 escreval("É possível fazer a divisão")		 escreval("")	  senao		 escreval("Teste ", i)		 escreval("Não é possível fazer a divisão")		 escreval("")	  fimse   fimsefimenquanto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, tirando os cocos que eu ainda não entendi vamos tentar fazer isso que voce precisa.

a) TarefaSua tarefa é escrever um programa que recebe como entrada várias quantidades de homens(K) ede cocos©, e responder, de acordo com esses valores, se é possível a divisão. Exemplo de entrada25 311 23121 520 3

voce já leu as variáveis, mas o que ele quis dizer com "se é possível a divisão"?

c) Saída de DadosPara cada conjunto de teste da entrada seu programa deve produzir três linhas na saída. Aprimeira linha deve conter um identificador do conjunto de teste, no formato “Teste n”, onde n énumerado a partir de 1. Na segunda linha deve aparecer resposta, no formato “É possível fazer adivisão” ou “Não é possível fazer a divisão”. A terceira linha deve ser 3 deixada em branco. Agrafia mostrada no exemplo de saída, abaixo, deve ser seguida rigorosamente (note que não sãousados acentos).Teste 1É possível fazer a divisãoTeste 2É possível fazer a divisãoTeste 3Não é possível fazer a divisãoTeste 4É possível fazer a divisão(esta saída corresponde ao exemplo de entrada acima)

Vou analisar melhor e ver se entendo essa divisão, mas a idéia é:
se (((c-k)/k) / k) = 0 entao		    escreval("Teste ", i)		    escreval("É possível fazer a divisão")		    escreval("")	  senao		    escreval("Teste ", i)		    escreval("Não é possível fazer a divisão")		    escreval("")	  fimse
O se faz o teste pra ver se é possível a divisão. Não sei dizer se está certo porque ainda não entendi."i" é uma variável que é incrementada a cada passagem do laço.
i <- i + 1
Com ela é possível voce dizer o número de "n" descrito no problema.

1 <= K <= 100000 <= c <= 500K=0 e C=0 apenas para indicar o fim dos dados de entrada

Esses são limitadores para suas variáveis.
se  (k > 10000) e (c > 500) ou (k = 0) e (c = 0) entao	  	  executa <- falso      fimse      se executa = verdadeiro entao
falta parenteses para limitar seu teste.Eu faria assim:
[code]   se  (k > 10000) ou (k < 1) ou (c > 500) ou (c < 1) entao	  	  executa <- falso      fimse      se executa = verdadeiro entao
Em qualquer uma das condições acima o "se" é executado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, tirando os cocos que eu ainda não entendi vamos tentar fazer isso que voce precisa.

 

a) Tarefa

Sua tarefa é escrever um programa que recebe como entrada várias quantidades de homens(K) e

de cocos©, e responder, de acordo com esses valores, se é possível a divisão.

Exemplo de entrada

25 3

11 2

3121 5

20 3

 

Vou tentat me enterar emlhor sobre essa divisão.. e ai volto a comentar... Eu tabém não estou entendendo muito...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja porque estou confuso.

VOce disse:

 

o segundo faz 4 pilhas de coco e ainda 1 para o macaco. até que na divisão não tenha como ser real e seja interia .. resumindo, não sobre mais coco para o macaco.

e o problema diz:

 

Sucessivamente, cada um dos

três homens restantes fez o mesmo que os outros dois, isto é, dividindo os cocos existentes em cinco

partes iguais, dando um coco para o macaco e guardando a sua parte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja porque estou confuso.

VOce disse:

 

o segundo faz 4 pilhas de coco e ainda 1 para o macaco. até que na divisão não tenha como ser real e seja interia .. resumindo, não sobre mais coco para o macaco.

e o problema diz:

 

Sucessivamente, cada um dos

três homens restantes fez o mesmo que os outros dois, isto é, dividindo os cocos existentes em cinco

partes iguais, dando um coco para o macaco e guardando a sua parte.

Ta tranks.... Vou à aula hoje e tiro essa dúvida...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja porque estou confuso.

VOce disse:

 

o segundo faz 4 pilhas de coco e ainda 1 para o macaco. até que na divisão não tenha como ser real e seja interia .. resumindo, não sobre mais coco para o macaco.

e o problema diz:

 

Sucessivamente, cada um dos

três homens restantes fez o mesmo que os outros dois, isto é, dividindo os cocos existentes em cinco

partes iguais, dando um coco para o macaco e guardando a sua parte.

Ta tranks.... Vou à aula hoje e tiro essa dúvida...

 

Boa Noite!!!! olha ai a explicação que peguei ontem.

acho que dá para exclarecer melhor.

 

Exemplo seria assim.

 

informe quantidade cocos: 25

 

informe quantidade homens: 3

 

se

 

25 é divisivel por 3 dando 1 para o macaco?

 

(sim) - o 1º homem levantou e dividiu o 25 em 3 partes de 8 cocos sendo uma dele mesmo, e completou 25 com o que (restou) ele

deu para o macaco. voltou a dormir.

 

o 2º homem levantou e viu que tinha somente 16 cocos, dividiu em 3 partes de 5 cocos sendo uma dele mesmo,

e completou 16 dando (restando) uma para o macaco. voltou a dormir

 

o 3º homem levantou e viu que tinha somente 10 cocos, dividiu em 3 parte de 2 cocos sendo uma dele memso.

e completou 10 partes dando (restando) uma para o macaco.

 

(agora a divisão inteira) amanheceu, levantou-se os três homens. havia 6 cocos, dividiram entre os três homens.

trêa partes de 2 cocos. e não restou nenhum para o macaco.

 

quando isso acontecer, informar... " É POSSIVEL FAZER A DIVISÃO ", por que:

 

c = 25

k = 3

 

25 / 3 = 8,33333

 

3 x 8 = 24 e 3 x 0,33333 = 1

 

 

16 / 3 = 5,33333

 

3 x 5 = 15 e 3 x 0,33333 = 1

 

10 / 3 = 3,33333

 

3 x 3 = 9 e 3 x 0,33333 = 1

 

6 / 3 = 2 "fim" não resta nada mais para o macaco. lembrando que 25/3 eu coloquei somente como exemplo. pode ser qualquer número

 

 

 

 

senao

 

"NÃO É POSSIVEL FAZER A DIVISÃO"

 

 

acho que deu pra entender melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então vamos tentar fazer esse algoritmo.

 

Ele deve passar por uma bateria de testes.

 

- O número deve ser recalculado a cada passagem do laço.

- O laço deve terminar quando número de homens for igual a 1.

- O cálculo é mais ou menos esse.

 

i <- henquanto i > 1 faca   se ((c-1)%h = 0) entao// ou seja a quantidade de cocos - 1 do macaco eh divisivel por h?	  d <- (c-1) / h	  c <- (c - 1) - d			  i <- i - 1   senao	  escrever "Nao eh possível a divisao"   fim_se   fim_enquanto

Se sair do laço é possível fazer a divisão.

Acho que é isso, fiz bem rápido e precisamos testar.

 

OBS: se entrar no senão voce deve encerrar o programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então vamos tentar fazer esse algoritmo.Ele deve passar por uma bateria de testes.- O número deve ser recalculado a cada passagem do laço.- O laço deve terminar quando número de homens for igual a 1.- O cálculo é mais ou menos esse.

i <- henquanto i > 1 faca   se ((c-1)%h = 0) entao// ou seja a quantidade de cocos - 1 do macaco eh divisivel por h?	  d <- (c-1) / h	  c <- (c - 1) - d			  i <- i - 1   senao	  escrever "Nao eh possível a divisao"   fim_se   fim_enquanto
Se sair do laço é possível fazer a divisão.Acho que é isso, fiz bem rápido e precisamos testar.OBS: se entrar no senão voce deve encerrar o programa.
Onde estou errando nessa colocação.... está dando errado....------------------------------k, c, i, d: inteiroexecuta : logicoinicio// Seção de Comandosexecuta <- verdadeirok <- -1c <- -1i <- kescreval("Informe o número de côcos:")leia©escreval("Informe o número de homens:")leia(k)enquanto i > 1 faca se (k > 10000) ou (k < 1) e (c > 500) ou (c < 1) entao executa <- falso fimseescreval("Informe o número de côcos:")leia©escreval("Informe o número de homens:")leia(k)fimenquantose ((c-1)%k = 0) entao d <- ((c - 1) / k) c <- ((c - 1) - d) i <- i - 1 escreval("Teste ", i) escreval("É possível fazer a divisão") escreval("")senao escreval("Teste ", i) escreval("Não é possível fazer a divisão") escreval("")fimsefimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce lê a quantidade de cocos e de homens entra no laço e não faz os cálculos necessários para verificar se é divisível ou não. A entrada de dados também está errada.

 

executa <- falseenquanto executa = false faca   escreval("Informe o número de côcos:")   leia©   escreval("Informe o número de homens:")   leia(k)   se (k > 10000) ou (k < 1) ou (c > 500) ou (c < 1) entao	  executa <- falso   senao	  executa <- verdadeirofimenquanto

Esse código só deixa passar as entradas que satisfaçam essa condição:

(k > 10000) ou (k < 1) ou (c > 500) ou (c < 1)

 

Agora voce precisa implementar o que falei:

 

i <- henquanto i > 1 faca   se ((c-1)%h = 0) entao// ou seja a quantidade de cocos - 1 do macaco eh divisivel por h?	  d <- (c-1) / h	  c <- (c - 1) - d	  i <- i - 1   senao	  escrever "Nao eh possível a divisao"				  i <- 0 // forca a saida do laço   fim_se   fim_enquanto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce lê a quantidade de cocos e de homens entra no laço e não faz os cálculos necessários para verificar se é divisível ou não. A entrada de dados também está errada.

 

executa <- falseenquanto executa = false faca   escreval("Informe o número de côcos:")   leia©   escreval("Informe o número de homens:")   leia(k)   se (k > 10000) ou (k < 1) ou (c > 500) ou (c < 1) entao	  executa <- falso   senao	  executa <- verdadeirofimenquanto
Esse código só deixa passar as entradas que satisfaçam essa condição:

(k > 10000) ou (k < 1) ou (c > 500) ou (c < 1)

 

Agora voce precisa implementar o que falei:

 

i <- henquanto i > 1 faca   se ((c-1)%h = 0) entao// ou seja a quantidade de cocos - 1 do macaco eh divisivel por h?	  d <- (c-1) / h	  c <- (c - 1) - d	  i <- i - 1   senao	  escrever "Nao eh possível a divisao"				  i <- 0 // forca a saida do laço   fim_se   fim_enquanto
----------------------------------------------------------------------------------------------

 

Esta dando erro de real para interi no que no calculo em vermelho. e quando mudo de / para \ ele fica lendo direto sem parar " não é possivel fazer a divisão".

 

k, c, i, d: inteiro

logica : logico

inicio

 

logica <- verdadeiro

c <- -1

k <- -1

i <- k

 

escreval("Informe o número de côcos:")

leia©

escreval("Informe o número de homens:")

leia(k)

 

enquanto ((k <> 0) e (c <> 0)) faca

se ((k > 10000) ou (k < 1)) ou ((c > 500) ou (c < 1)) entao

logica <- falso

escreval (logica

fimse

se logica = verdadeiro entao

se ((c-1)%k = 0) entao

 

d <- ((c - 1) / k)

c <- ((c - 1) - d)

i <- i - 1

 

escreval (" É possivel fazer a divisão")

 

senao

 

escreval("Não é possivel a divisão")

 

fimse

fimse

 

fimenquanto

Compartilhar este post


Link para o post
Compartilhar em outros sites

então faça isso:

 

- Crie uma variável real e transforme ela para inteiro.

 

real: xx <- ((c - 1) / k)d <- (int) x

Voce precisa verificar como converte real para inteiro.

Esse é apenas um exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então faça isso:- Crie uma variável real e transforme ela para inteiro.

real: xx <- ((c - 1) / k)d <- (int) x
Voce precisa verificar como converte real para inteiro.Esse é apenas um exemplo.
----------------------------------Ae... Acho que estou no caminho. mas está faltando alguma coisa ai ainda... ao tentar dividir 45 por 3 ele falou que é possivel. mas o 11 /3 não é possivel.... <_<
algoritmo "semnome"// Função :// Autor :// Data : 9/10/2007// Seção de Declaraçõesvark, c, i: inteirod,f:reallogica : logicoiniciologica <- verdadeiroc <- -1k <- -1i <- kescreva (" Informe o número de côcos:")leia©escrevalescreva (" Informe o número de homens:")leia(k)escreval (" ...........................")escrevallimpatelaenquanto ((k <> 0) e (c <> 0)) faca   se  ((k > 10000) ou (k < 1)) ou ((c > 500) ou (c < 1)) entao	  logica <- falso	  escreval ("Numero Inforreto")   fimse   se logica = verdadeiro entao	  se ((c-1)%k = 0) entao		 d <- ((c - 1) / k)		 e <- ((c - 1) - d)		 i <- i - 1		 escreval (" É possivel fazer a divisão.")		 escreval (" ...........................")	  senao		 escreval (" Não é possivel a divisão.")		 escreval (" .........................")	  fimse   fimse   escreval   escreva (" Informe o número de côcos:")   leia©   escreval   escreva (" Informe o número de homens:")   leia(k)   escreval (" ...........................")   escreval   limpatelafimenquanto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas coisas que observei:

 

A atribuição a "i" deve vir depois de validar o valor de "k".

Pode ser aqui:

 

se  ((k > 10000) ou (k < 1)) ou ((c > 500) ou (c < 1)) entao	  	  logica <- falso	  	  escreval ("Numero Inforreto")      fimse   i <- k

Outra coisa é:

Voce não prestou atenção quando eu disse que tinha dois loops um que validava o valor de "k" e "c" e outro que verifica se c é divisível por k segundo as regras.

 

enquanto i > 1 faca   se ((c-1)%h = 0) entao// ou seja a quantidade de cocos - 1 do macaco eh divisivel por h?	  d <- (c-1) / h	  c <- (c - 1) - d	  i <- i - 1   senao	  escrever "Nao eh possível a divisao"				  i <- 0 // forca a saida do laço   fim_se   fim_enquanto

Esse é outro loop.

A condição de saída é: i < 1

i vai representar os homens que restam para dividir, ou seja, a cada passagem do laço um é retirado.

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.