Red de conocimiento informático - Problemas con los teléfonos móviles - 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

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

¿Es directamente similar a esto?

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