Ver Mensaje Individual
  #10  
Antiguo 05-04-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Respecto a los ejercicios y el uso del cerebro, resulta ser que muchas veces el problema dice más de lo que ves inicialmente. La cuestión pasa por estar más despiertos a encontrar esas respuestas y datos que ofrece, se lo conoce como pensamiento lateral. Algo muy común en los problemas de ingenio.

Este ejercicio tiene su cuota de eso. Si lo analizas en detalle puedes saber que:
1) Sabemos de antemano cuales van a ser los resultados ya que se trata de unos números fijos. Es inutil pensar en posibles resultados cuando en realidad es siempre el mismo. Si ya tenemos el conjunto solución, entonces el problema está en otro lado
2) De (1) sabemos que la única parte variante del problema es en realidad el orden en que se presentan
3) El orden de distribución de los números es independiente del índice o posición dentro de la matriz. Si son independientes entonces no tiene sentido buscarle relación alguna; por tanto no hace falta intentar "calcular" una nueva posición (i, j)... directamente nos ahorramos esto y hacemos el recorrido de toda la vida: fila a fila, o columna a columna.

Con esas simples reglas y percepción del problema uno ya puede trabajar de una forma no tan habitual. Tu primera idea era generar y contar; puede servir... se puede pero si has de llevar la cuenta entonces debes de llevar la cuenta de cada número. Y fíjate que volvemos con ese planteo al punto (1). Sabes cuales son los números, ¡para que contarlos! Sabemos cuantos y cuales son. Además, si se pretende contar si se repite el número tenemos que para que se cumpla esto la cantidad debe ser mayor o igual a 1. Directamente me evito la cuenta... se que sólo se me permite UNA ¡vez no necesito contar!, directamente marco al número como usado. Que es equivalente a "marcarlo" con cantidades:

EstaUsado = Usados[nro] >= 1
EstaUsado = Usados[nro]

En el primero Usados[] es un vector numérico. EstaUsado almacena true cuando se cumpla esta condición, falso en otro caso. Cuando Usados[nro] es 0 quiere decir que no ha sido asignado. La otra variante ya la conoces.
Para el primer caso para marcarlo usado debes simplemente incrementar la cantidad; que es lo mismo que cambiarlo por un Usados[nro] = true.

Tratar de encontrarle pensamientos laterales a los problemas ayuda a ver incluso donde están nuestros errores. A veces es fácil... a veces no lo es.

Te invito a no prender la computadora cuando tengas un nuevo ejercicio. No pienses en lenguajes, en sentencias... Responde: ¿Cómo lo harías a mano?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita