Los maestros de VB vienen y echan un vistazo.
Cómo combinar un montón de datos para que la suma de cualquier dato sea igual a un valor fijo
¿Es similar a esto?
Ingrese N números, ingrese la suma A de varios de ellos
Necesita generar todos los números cuya suma es A. Combinación
Por ejemplo:
Ingrese 1, 2, 3, 4, 5, 6, 7, 8
Ingrese y A=9
Salida (1, 8), (2, 7), (1, 2, 6)...
Para enumerar todas las combinaciones posibles, los números no se pueden reutilizar
Pero si la entrada es 3, 3, 3, 3, 3
Entrada y A=9
La salida es (3, 3, 3), (3, 3, 3 )...
Cada 3 es diferente
Asegúrate de no repetir ni omitir nada
Se me ocurrió hacer uno, usando un algoritmo recursivo, deja un correo electrónico y puedo enviarte el proyecto
Dim number() As Integer 'Declara una matriz pública ***, esta matriz se usa para almacenar el número que ingresas
Dim cou As Integer 'Se usa para guardar la cantidad de números de entrada
Dim sum As Integer 'Se usa para guardar la suma de los números de entrada
Dim a, n As Integer 'a es la suma A en su pregunta, n es el número de matrices temporales que estoy usando actualmente
Dim lsnumber() As Integer 'Se usa para guardar el número que se agrega
Private Sub Form_Load()
cou = 9 'Inicialización, el usuario ingresó 9 números, esto depende de tus necesidades
sum = 0 'Inicialización, la suma es 0
a = 9 'Inicialización, la suma esperada es 9
n = 0 'Inicialización, actualmente no se utiliza ningún espacio en la matriz lsnumber()
ReDim number(cou - 1 ) As Integer 'Redefinir la longitud de la matriz, dependiendo de cou, el subíndice de la matriz es de 0 a cou-1
ReDim lsnumber(cou - 1) As Integer 'Redefine la longitud de la matriz, porque no hay forma de saber el programa Cómo se usan muchos números para sumar_
Entonces, deje que la longitud de esta matriz sea igual a cou -1
Para i = 0 a 8 'El bucle for se usa para asignar un valor a la matriz, este valor usted puede ingresarlo usted mismo Para facilitar la prueba, lo asigné directamente
número(i) = i + 1
Siguiente
<. p>Text1.Text = Text1.Text & "La suma del número de capas agregadas la última vez y esta vez" & vbCrLfLlamar a searchnum(0) 'El punto clave es llamar a la función recursiva para resuelva el problema y pase el valor 0 a la función para su uso
End Sub
Función searchnum(ByVal num) 'Entrada de función recursiva, no he usado la recursividad algunas veces, así que lo escribí de la manera que estoy acostumbrado_
No sé cómo usar la manera de los expertos. El método de escritura es el siguiente
For i = num To cou - 1 'Recorre cada elemento en la matriz number(), el subíndice comienza desde num
Text1.Text = Text1.Text & num & " " & sum & "+" 'Muestra el subíndice de matriz inicial del operación actual y el valor obtenido de la última ejecución en el cuadro de texto
suma = suma + número(i) 'y acumular p>
lsnúmero(n) = número(i) 'Registro el número utilizado actualmente para la suma
Text1.Text = Text1.Text & number(i) & "=" & sum & vbCrL
f 'Muestre el número agregado actual y el resultado en el cuadro de texto
Si suma < a Entonces 'Si el valor actual es menor que la suma que ingresé, llame a esta función recursiva nuevamente
n = n + 1 'Suma 1 al número de números utilizados para agregar
searchnum i + 1 'Al llamar al valor pasado por sí mismo aquí i+1
ElseIf sum = a Entonces 'Si esta suma resulta ser la suma que ingresé, entonces envíela
pr n 'Muestre estos números, vea el módulo a continuación
suma = suma - número(i)
' no descarta que los números restantes sin marcar sean iguales a número(i), así que continúe con el bucle
Else
suma = suma - número( i) 'Obtener el valor de la suma después de la última llamada a este programa
End If
Siguiente
'sentencia if No puedo expresarla claramente en palabras: Déjame darte un ejemplo.
'Supongamos que tengo tres números 1, 2 y 3, y la suma de entrada es 4_
Aparecerán estos cálculos: 1+ 2. +3=6 no satisface_
1+3=4 satisface_
2+3=5 no satisface_
Este programa calcula estas fórmulas de cálculo, cada una vez que el cálculo se suma a 3, saltará de esta llamada y continuará con la última llamada
Si num > 0 Entonces
suma = suma - número(num - 1) ' Cuando esta función recursiva está a punto de finalizar, el valor de la suma debe ser el valor después de la última llamada a sí mismo. If_
num<=0, el subíndice de la matriz estará fuera de los límites
.n = n - 1 'El número de números utilizados para sumar debe reducirse en 1
End If
End Function
Private Sub pr( ByVal leng) 'Salida guardada El número en la matriz lsnumber()
Text1.Text = Text1.Text & "El número que cumple con los requisitos:"
Para i = 0 Para longitud
Text1.Text = Text1.Text & lsnumber(i) & " "
Siguiente
Text1.Text = Text1.Text & vbCrLf
Fin del subtítulo p>