Tengo un número x. ¿Cómo puedo encontrar el siguiente número más grande que x cuya suma de dígitos es la misma que la suma de los dígitos de x?

Convirtamos ese número en una matriz con índices que comiencen desde el dígito más a la derecha. Entonces, para x = 1420, la matriz respectiva sería a = [0,2,4,1].

  1. Encuentre el índice más a la izquierda i de esta matriz donde la suma a [ j ] para j <= i es mayor que cero y a [ i +1] <9. Rellene la matriz con un 0 si inicialmente no existe dicho índice. Entonces, para x = 9980, tendríamos a = [0,8,9,9,0] y ese índice i es el 3º elemento de la matriz (basado en cero) donde a [3]> a [4] (que es 9> 0).
  2. Calcule la suma de todos los números en el lado izquierdo de a [ i +1] (es decir, los índices i y debajo) y nombre esa suma S. Para el ejemplo anterior, eso sería S = 0 + 8 + 9 + 9 = 26.
  3. Aumente a [ i +1] en uno. Disminuya S en uno. S de nuestro ejemplo se convierte en 25 y un [4] se convertiría en 1.
  4. Forma S = k * 9 + m donde m <9 y hacer a [0] = a [1] =… = a [k-1] = 9 y a [k] = my a [k + 1] = a [k + 2] =… = a [i] = 0. En el ejemplo anterior S = 2 * 9 + 7. Entonces a sería [9,9,7,0,1].
  5. Genere el número de la matriz. 10799.

Gracias por A2A.

Formulé esta pregunta, pero como nadie respondió y hay algunos seguidores de esta pregunta que quieren respuesta y un amigo mío la ha resuelto, así que debería responder.

considere el número 29, luego debe encontrar el siguiente número cuya suma de dígitos es 11 y mayor que x (que es 38).
Una cosa que se puede hacer es que podemos disminuir un dígito más a la izquierda y aumentar el siguiente dígito. por ejemplo, para 789, disminuya de 9 a 8 y aumente de 8 a 9, lo que se convertirá en 798
Pero para casos como 990, donde no podemos disminuir un dígito (0 aquí). encuentre el primer dígito que se puede disminuir (aquí 9 en el décimo lugar), lo que hace que el número sea 9 80, luego encuentre el siguiente dígito desde 8 e increméntelo, pero 9 (en el lugar 100) no se puede incrementar, así que incremente 0 en la milésima posición, lo que hace que el número sea 1 9 8 0.
luego clasifique los números después del número incrementado y reorganícelos, lo que hace que el número sea 1089. que es el deseado.

lo más rápido sería permutar el primer dígito con otro dígito que sea mayor.
o cualquier par de dígitos de este tipo

si no hay ninguno disponible (por ejemplo, 7777), comience a cambiar los dígitos (-1 a uno; +1 a otro) hasta que encuentre un par de pedidos adecuado.

Creo que los casos en que todos los dígitos son 9 o todos los dígitos son 0 no tienen solución con el mismo número de dígitos: agregue un dígito

ej .: 29 => 92