La Red de Conocimientos Pedagógicos - Currículum vitae - 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

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" & vbCrLf

Llamar 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

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