El número de soluciones enteras no negativas de x₁+⋯+x_k=n es C(n+k−1,k−1), para n≥0 y k≥1. Represente n estrellas idénticas separadas en k cajas nombradas mediante k−1 barras; barras adyacentes y barras en los extremos permiten entradas cero. Las cajas son distinguibles, los objetos no. Contar tokens distintos asignaría cada token independientemente, dando k^n antes de otras restricciones. Decida el modelo según lo que representan los objetos y los receptores, no según un coeficiente binomial de apariencia familiar.
Para asignaciones positivas x_i≥1, ponga z_i=x_i−1; el total restante es n−k, dando C(n−1,k−1) cuando n≥k. Límites inferiores generales x_i≥a_i se manejan restando cada a_i. Que haya al menos un cero es el complemento de que todos los elementos sean positivos: reste C(n−1,k−1) del total no negativo. Casos superpuestos como exactamente dos cajas vacías necesitan un conteo diferente; restar cada caso de caja vacía independientemente duplica el conteo de sus intersecciones.
Trazar un diagrama de flujo una declaración ejecutada a la vez, registrando variables en una tabla. Distinga la asignación de una prueba de igualdad matemática; el lado derecho de una asignación usa el valor antiguo antes del reemplazo. Registre qué rama se ejecuta a continuación y qué variables se reinician. Un nuevo candidato de bucle externo puede reiniciar una suma interna sin reiniciar el candidato mismo. Para un proceso que añade 1,3,5,… a S desde cero, tras m adiciones S=m² y el próximo sumando es 2m+1.
Un invariante de bucle es verdadero antes y después de cada iteración. El invariante de suma de cuadrados se cumple inicialmente en m=0 y se preserva porque m²+(2m+1)=(m+1)². Un invariante solo no demuestra terminación. Para probar si un entero N≥0 es un cuadrado añadiendo números impares hasta S≥N, S crece sin límite; equivalentemente, m aumenta y debe alcanzar un límite como N. A la salida, la igualdad significa cuadrado y el desbordamiento significa no cuadrado. Un valor impreso debe alcanzarse en un camino de ejecución real; un patrón numérico plausible solo no es un trazado.