[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [obm-l] daria para criar um algoritmo???
Ola Vanderlei, Prof Nicolau e demais
colegas desta lista ... OBM-L,
Uma outra maneira de ver a mesma solucao sem precisar passar para binario e
partir do numero e "decompo-lo" usando as duas teclas. Assim :
1994 = 997*2=997B=(996 + 1)B=996AB=498BAB=249BBAB=
=(248+1)BBAB=248ABBAB=124BABBAB=62BBABBAB=
=31BBBABBAB=(30+1)BBBABBAB=30ABBBABBAB=15BABBBABBAB=
=14ABABBBABBAB=7BABABBBABBAB=6ABABABBBABBAB=
=3BABABABBBABBAB=2ABABABABBBABBAB=1BABABABABBBABBAB=
=0ABABABABABBBABBAB
A sequencia e, portanto : ABABABABABBBABBAB
Como 2X+2 = 2(X+1) a seguencia BAA teclada para um dado numero qualquer no
visor e equivalente a teclar AB. Isso implica um criterio de simplificacao,
ou seja, uma condicao necessaria para que uma sequencia seja minima e que
nao exista mais que uma letra A consecutiva apos uma letra B.
Exemplo 1 :
ABABAAAABBBBBA = ABA(BAA)AABBBBBA=ABA(AB)AABBBBBA=
=ABAA(BAA)BBBBBA=ABAA(AB)BBBBBA=ABAAABBBBBBA=
=A(BAA)ABBBBBBA=A(AB)ABBBBBBA=AABABBBBBBA
Evidentemente que e possivel gerar um algoritmo, inclusive bastante trivial.
Ei-lo :
FUNCAO SEQUENCIAMINIMA(NUMERO)
SEQUENCIA =""
ENQUANDO NUMERO # 0
SE mod(NUMERO,2)=0
ENTAO :
1) SEQUENCIA = "B" + SEQUENCIA
2) NUMERO = NUMERO / 2
SENAO :
1)SEQUENCIA = "A" + SEQUENCIA
2) NUMERO = NUMERO - 1
FIMSE
FIMENQUANTO
RETORNE SEQUENCIA
Esta funcao em pseudo-codigo e facilmente implementavel em qualquer
linguagem, mesmo as nao procedurais. Ela recebe NUMERO e devolve
a sequencia minima. A variavel locall SEQUENCIA guarda o resultado
pretendido e e o valor de retornado.
Um Abraco a Todos
Paulo Santa Rita
3,1204,250406
>From: "Nicolau C. Saldanha" <nicolau@mat.puc-rio.br>
>Reply-To: obm-l@mat.puc-rio.br
>To: obm-l@mat.puc-rio.br
>Subject: Re: [obm-l] daria para criar um algoritmo???
>Date: Tue, 25 Apr 2006 09:21:34 -0300
>
>On Mon, Apr 24, 2006 at 01:46:44AM +0000, vandermath@brturbo.com.br wrote:
> > Um equipamento eletrônico consiste de um visor e de duas teclas A e B.
>Ao
> > ligarmos o equipamento, aparece um zero no visor. Apertando-se a tecla
>A, o
> > número que está no visor é aumentado de 1 unidade e apertando-se a
>tecla B, o
> > número que está no visor é multiplicado por dois. Sejam x e y
>respectivamente
> > as menores quantidades de vezes que devemos apertar as teclas A e B para
> > obter o número 1994. Qual é o valor da diferença (y – x)? Se o
>número fosse
> > muito grande, daria para fazer de um modo fácil???
>
>Se você escrever tudo na base 2 o problema fica bem óbvio:
>a tecla B acrescenta um 0 no final. Por exemplo, 1994 é 11111001010 na
>base 2.
>Ele pode ser obtido assim:
>
> 0
>A 1
>B 10
>A 11
>B 110
>A 111
>B 1110
>A 1111
>B 11110
>A 11111
>B 111110
>B 1111100
>B 11111000
>A 11111001
>B 111110010
>B 1111100100
>A 1111100101
>B 11111001010
>
>Assim, exceto pelo primeiro algarismo, para cada algarismo 0 apertamos B
>e para cada algarismo 1 apertamos B+A.
>
>[]s, N.
_________________________________________________________________
Facilite sua vida: Use o Windows Desktop Search e encontre qualquer arquivo
ou e-mail em seu PC. Acesse: http://desktop.msn.com.br
=========================================================================
Instruções para entrar na lista, sair da lista e usar a lista em
http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
=========================================================================