Let F(n) denote the smallest positive integer greater than n whose sum of digits is equal to the sum of the digits of n. For example, F(2019) = 2028. Compute F(1) + F(2) + ... + F(1000):
Haciéndolo a mano, es fácil y entretenido ver a cada número cuál es el siguiente que le corresponde. Se puede ver, también, que siguen un patrón. Sin embargo, para sumar los 1000 como pide, he preferido hacer un programa que lo haga por mí. Adjunto programa y solución. Si veis algún error, avisadme.
#include <iostream>
using namespace std;
int suma(int n){
int s=0;
while (n>0){
s+=n%10;
n=n/10;
}
return s;
}int siguiente(int n, int s){
int i;
for(i=n+1; suma(i)!=s;i++){}
return i;
}int main(){
int ac=0;
for(int i=1;i<=1000;i++){
cout<<i<<" "<<siguiente(i,suma(i))<<endl;
ac+=siguiente(i,suma(i));}
cout<<endl<<endl<<ac;}
Solución: 535501
Prueba a escribir el programa poniendo, en el último paso, i<=1, a ver si te da 2,porque creo que te dará 1 y eso no es correcto (F(1)=2)
No, da 10.
Si ponemos i<=1 sólo hace la iteración para el 1. Busca el número siguiente al 1, que es el 10, al ser el primero cuyas cifras suman lo mismo. No añade más números, pues sólo se hace para ese.
F(1)=1 luego la suma debe ser 1...cierto fallo. Está correcto entonces.
Que tengo hambre y me como los 0s,jaja. Lo dicho, que es verdad, que el siguiente a 1 es 10.