Numero de enteros positivos menores que 1000000 y la suma de sus dígitos sea 19

A continuación los avances del problema,

Espero me puedan asistir

Primero calcule la combinación con repeticicon de los 6 dígitos que suman 19, a través de la fourmula C(n+r-1, r)

x1+x2+x3+x4+x5+x6=19

C(n,r)=n!/r!*(n-r)!

C(6,19) = C(6+19-1,19) = C(24,19)= 42,504

1 Respuesta

Respuesta
1

·

·

¡Hola Santiago!

En efecto, todas las formas de sumar 19 con 6 números enteros no negativos son las combinaciones con repetición de 6 tomadas de 19 en 19

CR(6,19) = C (6+19-1, 19) = C(24,19) = C(24,5) =

24·23·22·21·20 / (5·4·3·2·1) = 42504.

Pero ahora debemos quitar aquellas combinaciones en las que alguno de los seis números es mayor de 9, ya que esa combinación no se corresponderá con un número de seis o menos cifras escrito en base 10.

Al sumar 19 solo se puede dar el caso de que haya uno mayor de 9, si fueran dos ya sumarían 20 y de esos no tenemos ninguno.

Como calcular cuántas combinaciones de estas hay. Muy sencillo, si al número mayor de 9 le restamos 10 tendremos todas la cifras menores o iguales a 9 y su suma ya no será 19 sino 9

Supongamos que el número mayor de 9 era el primero x1

x1 + x2 + x3 + x4+ x5 + x6 = 19

tenemos x1 = x1' + 10

restando 10 en los dos lados quedará

x1' + x2 + x3 + x4 + x5 + x6 = 9

Y la cantidad de soluciones de esta ecución es

CR(6,9) = C(6+9-1, 9) = C(14, 9)= C(14,5) =

14·13·12·11·10 / (5·4·3·2·1) = 2002

Pero igual que hemos supuesto que el número mayor era el primero, puede ser el segundo, tercero, ... hasta el sexto.

Por lo tanto las combinaciones inválidas son

6·2002 = 12012

Y las combinaciones buenas son:

42504 - 12012 = 30492

------------

He comprobado que está bien con este torpe pero fácil programa en VisualStudio C++

·

#include "stdafx.h"
int main()
{
    int i, j, k, l, m, n, c;
    c = 0;
    for (i = 0;i < 10;i++)
        for (j = 0;j < 10;j++)
            for (k = 0;k < 10;k++)
                for (l = 0;l < 10;l++)
                    for (m = 0;m < 10;m++)
                        for (n = 0;n < 10;n++)
                            if (i + j + k + l + m + n == 19) c = c + 1;
    printf("%d", c);
        getchar();
    return 0;
}

Saludos.

:

:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas