Vb master, ven y echa un vistazo. Cómo hacer que la suma de cualquier dato en una pila de datos sea igual a un valor fijo
Ingrese n números e ingrese la suma a de varios números.
Necesitas generar todas las combinaciones de números cuya suma sea a.
Por ejemplo:
Ingrese 1, 2, 3, 4, 5, 6, 7, 8.
Suma de entrada A=9
Salida (1, 8), (2, 7), (1, 2, 6)...
A enumere todas las combinaciones posibles, los números no se pueden reutilizar.
Pero si ingresas 333333
La suma de entrada A=9
La salida es (3, 3, 3), (3, 3, 3) .. ....
Cada 3 es diferente.
No pesar ni gotear.
Acabo de hacer un algoritmo recursivo y dejé una dirección de correo electrónico para poder enviarte el proyecto.
Dim number() As Integer 'Declara una matriz * * * pública para almacenar el número que ingresa.
"Dim cou As Integer" se utiliza para guardar la cantidad de números ingresados.
"Dim sum As Integer" se utiliza para guardar la suma de los números ingresados.
Dim a, n Como Integer 'a es la suma de su pregunta, a, n es el número de matrices temporales que estoy usando actualmente.
Dim lsnumber() As Integer 'Se utiliza para guardar el número que se agrega.
Private subform_Load()
Cou = 9 'Durante la inicialización, el usuario ingresó 9 números, dependiendo de sus necesidades.
Suma = 0 'Inicialización, la suma es 0.
A = 9' Inicialización, la suma estimada es 9.
N = 0 'Inicialización, aún no se ha utilizado ningún espacio en la matriz lsnumber().
redimnumber(cou-1)as integer 'Redefine la longitud de la matriz. Según Cou, los subíndices de una matriz van de 0 a cou-1.
redim ls number(cou-1)as integer 'redefine la longitud de la matriz, porque es imposible saber cuántos números suma el programa_
Así que dejemos que la longitud del matriz Igual a cou -1.
For i = 0 to 8' El bucle for se utiliza para asignar valores al array. Puede ingresar este valor usted mismo para facilitar la prueba, lo asigné directamente.
Número(i) = i 1
Luego
Texto1. Texto = Texto1. Amp de texto "La suma del número de pisos agregados la última vez y esta vez"; vbCrLf
Llame a la tecla searchnum(0), llame a la función recursiva para resolver y pase el valor de 0 al función.
Conector final
Entrada de función recursiva Función searchnum(ByVal num) No he usado la recursividad algunas veces, así que la escribí de mi manera habitual_.
No se puede escribir de forma experta
Para i = num Para cou-1 'Recorrer cada elemento en la matriz number(), el subíndice comienza desde num.
Texto1. Texto = Texto1. Texto amp número amp" amp suma y." "Envía el subíndice de matriz inicial de la operación actual y el valor obtenido de la operación anterior al cuadro de texto.
Suma = suma número(i)' y acumulación
"Lsnumber(n) = number(i)" registra el número actualmente utilizado para la suma
Texto1.
envíe el número de amplificador de texto (uno) y la suma de amplificadores "=". "VbCrLf" genera la suma de los números actualmente agregados en el cuadro de texto.
Si la suma es menor que la suma que ingresé, llame a esta función recursiva nuevamente.
N = n 1 'Suma 1 al número utilizado para la suma.
Searchnum i 1 'Cuando se llama a sí mismo aquí con el valor pasado, i 1.
Si esta suma resulta ser la suma de mis entradas, entonces envíela.
Pr n 'Importe estos números, consulte el módulo a continuación.
Suma = suma (I)
No se excluye que los números restantes no marcados sean iguales al número (I), y el ciclo continúa.
Otros
Suma = Número-suma(i)' Obtiene el valor de la suma desde la última vez que se llamó a este programa.
Terminará si...
Entonces
Si no se puede expresar claramente con palabras, demos un ejemplo.
Supongamos que tengo tres números, 1, 2, 3, y la suma ingresada es 4_
Aparecerán estas fórmulas: 1 2 3 = 6 no satisface_
1 3=4 está satisfecho_
2 3=5 no está satisfecho_
Este programa calcula estas fórmulas después de cada cálculo, suma 3, salta de esta llamada y continúa. con la última llamada.
Si num gt entonces 0
Suma = Suma-número(num-1)' Cuando esta función recursiva está a punto de finalizar, el valor de suma debe ser el valor después del último llamarse a sí mismo. Si _
num lt=0, el subíndice de la matriz estará fuera de los límites.
N = n-1 'El número utilizado para la suma debe reducirse en 1.
Terminará si...
Finalizar función
private sub pro(byvalleng)' genera el número guardado en la matriz lsnumber().
Texto1. Texto = Texto1. Amp de texto "Número de requisitos cumplidos:"
Para i = 0 refrigeración del suelo
Texto1. Texto = Texto1. Envía un mensaje de texto amplsnumber(i) y amp" "
Luego
Texto1. Texto = Texto1. Texto ampvbCrLf
Conector final