Emparejar numeros

Iniciado por Alkro, 29 Agosto 2009, 01:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Alkro

Tengo que hacer una rutina que pasándole una matriz de números desordenada me empareje esos numeros teniendo en cuenta que la suma de cada pareja no supere una cantidad y que a su vez sea capaz de evaluar qué emparejamientos serían los mejores para dejar la menor cantidad de numeros sin pareja.

Ejemplo:

Matriz: 2,6,3,7,8,4,2,4,2,1,1,8      
Limite de suma : 10

REsultado:

1,1

2+8
6+4
7+2
8+2
3+4

Quedarian los 1's que se quedarian lejos del 10.

No se cómo empezar. ¿Algún método de ordenación o algo así por donde pueda empezar a pegarme?

MCKSys Argentina

Hola!

La primer idea que me viene a la mente es:


Option Explicit

Private Sub Command1_Click()
Dim a() As Long
Dim ret As String

ReDim a(11)
a(0) = 2
a(1) = 6
a(2) = 3
a(3) = 7
a(4) = 8
a(5) = 4
a(6) = 2
a(7) = 4
a(8) = 2
a(9) = 1
a(10) = 1
a(11) = 8
ret = Emparejar(a, 10)
MsgBox ret
End Sub

Private Function Emparejar(Matriz() As Long, ByVal Valor As Long) As String
'devuelve una cadena del tipo: Valor1 + "," + Valor2 + "/"
'notar que el "/" es sólo un separador
Dim I As Long
Dim J As Long
Dim Max As Long
Dim retStr As String

Max = UBound(Matriz)
retStr = ""

For I = 0 To Max - 1
    For J = I + 1 To Max
        If (Matriz(I) + Matriz(J) <= Valor) Then
            'la pareja no supera el valor
            retStr = retStr & I & "," & J & "/"
        End If
    Next J
Next I
Emparejar = retStr
End Function


Saludos!

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


BlackZeroX

Cita de: MCKSys Argentina en 29 Agosto 2009, 02:07 AM
Hola!

La primer idea que me viene a la mente es:


y a mi es por que le haces la tarea -.-", digo xS
The Dark Shadow is my passion.

MCKSys Argentina

Quizas sea porque tenia poco que hacer en ese momento...  ;D

Saludos!


MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."