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?
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!
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
Quizas sea porque tenia poco que hacer en ese momento... ;D
Saludos!