[C con Clase] Esta es la respuesta correcta (no la otra) Necesito la lógica de este problema (arreglos).

Diego diegoartesanal en gmail.com
Vie Jun 17 03:02:42 CEST 2011


Antonio:

Agradezco tu respuesta, estoy probando ahora pasar a c++ la lógica que me
mostraste. He notado igualmente una observación que quería hacerte .
Ya que según lo pedido en el problema, además de obtener el número de veces
que apreta 1 y 2, dice:


b) muestre la cantidad de veces que debera apretar el boton 1
y la cantidad de veces que debera presionar el boton 2
para obtener, *en la menor cantidad posible de pasos*, el numero "m" el en
visor
indique la manera en q debe apretarse los botones.

Esto de *la menor cantidad de posible *de pasos me llevó a observar si
existe una menor cantidad de pasos de la que arroja el algoritmo que me
pasaste y he notado que sí. Te muestro:


*-*-* EJEMPLO *-*-*
Supongamos que ingresamos como 'm' = 12

Basándome en lo que me planteaste, divido entre 2 el 'm' hasta que el
cociente sea menor a 2. Y voy contando la cantidad de veces que divide.

m=12
contador= 0

12 / 2 = 6 , contador = 1
6/2 = 3, contador = 2
3/2 = 1.5 , contador = 3

Ahí finalizaría el bucle. Ok, entonces las veces que debe la tecla '2'
sería: 3


Para obtener cuantas veces debe apretar '1' recurro a la formula que me
diste..

*2 ^ contador(que es 3) = 8*

Las veces que se deba apretar '1'', según lo que me dijiste sería ( m - *el
resultado anterior )* , en este caso

12 - 8 = 4 ( las veces que debe apretar 1 , y le tenemos que sumar un 1 )

4+1 = 5 veces debe apretar la tecla '1'

Bien , ahora he obtenido:

* La tecla '2', se debe apretar 3 veces.
* La tecla '1', 5 veces.

Mi secuencia sería

Tecla           Valor
'1'                  1
'2'                  2
'2'                  4
'2'                  8
'1'                  9
'1'                  10
'1'                  11
'1'                  12

Como vemos, la secuencia cumple con la cantidad de veces que debe apretarse
cada uno: la tecla '2' tres veces, y la tecla '1' , cinco veces.

Secuencia quedaría ->  1, 2, 2, 2, 1, 1, 1, 1 ....


Bueno, ahora el asunto es que encontré una secuencia de menos pasos.. Mira
esto:

m=12

Si hago la secuencia de esta manera:

Secuencia : 1,2,1,2, 2


Tecla           Valor
'1'                  1
'2'                  2
'1'                  3
'2'                  6
'2'                  12

Ha hecho lo mismo, en 5 pasos, contra los 8 que me arroja el algoritmo que
me pasaste.

Y aquí me quedo, no encuentro forma de cómo optimizar la cantidad de pasos.
Creo que lo que me pasaste es la parte inicial, pero debo hacer algo más por
lo visto.

Te vuelvo agradecer por tu respuesta, y espero que puedas revisar esto que
te indico.

Una vez que quede definido el algoritmo, lo implemento en c++ y lo comparto
con la lista, este problema me está dando dolor de cabeza.

Saludos
Diego Alvarado.

El 16 de junio de 2011 05:46, jagse <jagse en intercomgi.com> escribió:

>  Hola de nuevo:
>
>
>
> PERDONA, ME HE EQUIVOCADO.
>
>
>
> Realmente lo que se ha de hacer es de dividir sucesivamente
>
> el número ingresado por dos hasta que el cociente sea inferior a 2. El
> número de veces que lo has
>
> dividido por dos es el numero de veces que has de pulsar el botón dos..
>
> Una vez obtenidos el nro. de veces que has de duplicar, eleva 2 a ese
> numero de veces.
>
> El resultado réstalo al numero ingresado.
>
> LA diferencia que obtengas más 1 (debido a que el contador está en cero y
> si multplicas por 2 = 0, se ha
>
> de poner el contador en 1) es el número de veces que has de pulsar el nro
> 1.
>
>
>
>
>
>
>
> Ejemplo:
>
>
>
> Numero 34
>
>
>
> 34/2 = 17                      1
>
> 17/2 = 8,5                     2
>
> 8,5/2 = 4,25                  3
>
> 4,25/2=2,125                4
>
> 2,125/2=1,0625             5
>
>
>
> Numero de veces que se ha de pulsar 2 = 5
>
>
>
> 2^5=32
>
>
>
> 34-32=2
>
>
>
> Numero de veces que se ha de pulsar el 1 = 2 + 1 = 3
>
>
>
> Verificación:
>
>
>
> El 1    Visor = 1            1
>
> El 2  , Visor = 2                        1
>
> El 2    Visor = 4                        2
>
> El 2    Visor = 8                        2
>
> El 2    Visor = 16                      4
>
> El 2    Visor = 32                      5
>
> El 1    Visor = 33           2
>
> El 1    Visor = 34           3
>
>
>
> Espero que, esta vez, te sirva y perdona por mi error anterior.
>
>
>
> Antonio Gómez
>  ------------------------------
>
> *De:* diegoartesanal en gmail.com [mailto:diegoartesanal en gmail.com]
> *Enviado el:* jueves, 16 de junio de 2011 7:00
> *Para:* Lista de correo sobre C y C++
> *Asunto:* [C con Clase] Necesito la lógica de este problema (arreglos).
>
>
>
> Un equipo electronico consta de un visor y dos unicos botones señalados
> con 1 y 2 al encender el equipo aparece cero en el visor. si se
> oprime el boton 1 el numero que esta en la pantalla
> aumenta en 1; mientras que si se oprime el boton 2 ; el número se duplica
>
> Escribir un programa que permita:
>
> a) el ingreso de un numero natural "m"
>
> b) muestre la cantidad de veces que debera apretar el boton 1
> y la cantidad de veces que debera presionar el boton 2
> para obtener, en la menor cantidad posible de pasos, el numero "m" el en
> visor
> indique la manera en q debe apretarse los botones.
>
> Si alguno me echa una mano con la lógica del problema( no hace falta el
> programa , ni el código en c++), me dará una ayuda.
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110616/9ac03387/attachment.html>


Más información sobre la lista de distribución Cconclase