Wyznaczenie sumy n początkowych liczb których suma cyfr wynosi 10 – program nie działa

0

Witam mam zadanie do wykonania. Napisz program wyznaczający sumę n początkowych liczb których suma cyfr wynosi 10. Oto moja próba walki.

#include<iostream>
using namespace std;


int sumacyfr (int liczba)
{
    while(liczba!=0)
        {
            c+=liczba%10;
            liczba/=10;
        }
    return c;
}

int suma (int liczba)
{
    int i=1;
    int s=0;

    while(i<liczba)
        {
           if(c==10)
            {s=s+liczba(i);i++}
            else
            {i++;}
        }
     cout<< s;

}


int main()
{
    cout<< sumacyfr(91);

}

No i oczywiście to nie działa, a ja nie wiem co jest tu źle. Pomoże ktoś ?

1

Napisz program wyznaczający sumę n początkowych liczb których suma wynosi 10.

Co ten program ma robić? Zgodnie z tym opisem poniższy kod jest rozwiązaniem problemu:

cout << 10;
0

Acha: "sorki źle spisałem zadanie : Napisz program wyznaczający sumę n początkowych liczb których suma cyfr wynosi 10". Uściślijmy, chodzi o takie liczby?:
19 + 28 + 37 + 46 + 55 + 64 + 73 + 82 + 91 + 109 + 118 + ...
Ilość takich liczb będzie skończona, czy ostatnia to 1111111111? A program ma zwrócić ich sumę?

EDIT: Takich liczb jest nieskończoność: mój post poniżej.

0

Nie działa, ale część mógłbyś to poprawić sam czytając błędy kompilacji. W pierwszej funkcji brakuje inicjalizacji c.
Co ma robić funkcja suma? Co to za próba wywołania liczba(i) skoro liczba jest liczbą, a nie funkcją? Co to za cout zamiast zwracania wartości? Co to za zmienna c w środku? Ogólnie to cała ta funkcja do wyskrobania.

Ja bym to zrobil tak:

int sumaNPierwszychLiczbKtorychSumaCyfrWynosi10(int n) {
    int suma = 0, counter = 0;
    for(int i = 0; counter < n; i++) {
        if(sumaCyfr(i) == 10) {
            suma += i;
            counter++;
        }
    }
    return suma;
}
2

Czyli, Twój problem jest równoważny do znajdywania rozwiązań, w liczbach naturalnych, takich równań:
x + y = 10
x + y + z = 10
x + y + z + v = 10
Oczywiście żle napisałem powyżej, takich liczb będzie nieskończoność: 19, 190, 1900, 19000, ... Brutalnie, można, mając n, generować permutacje zbiorów dwu, trzy, i tak dalej elemntowych sumujących się do dziesięć, obcinać te z zerami na początku, i, mając ich n, posortować i zsumować. Złożonośc wykładnicza, ale powinno policzyć dokładnie.

0

Walczyłem i się nie odzywałem, i wywalczyłem coś takiego

#include<iostream>
using namespace std;


int sumacyfr (int liczba)
{
    int s=0;
    while(liczba!=0)
        {
            s+=liczba%10;
            liczba/=10;
        }
    return s;
}
bool sumarowna10 (int liczba)
{
    int i = 0;
    
        
}

int suma (int zakres)
{
    int i=1;
    int s=0;

    while(i<zakres)
    {
        if(sumarowna10(sumacyfr(i)))
        {
            s+=i;
            i++;
        }
    return s;
    }
}

int main()
{
    cout<<suma(100);
}


Problem w tym, że nie wiem jak pokombinować w bool żeby sprawdzał czy suma cyfr jest równa 10.

0

A nie prościej i szybciej by było wyliczyć ostatnia cyfrę odejmując sumę wcześniejszych od 10?

0

Nie do końca rozumiem, ale powiem tak na ćwiczeniach miałem taki schemat i bardziej niż na jego uproszczeniu zależy mi na zrozumieniu go

0

Przecież, można tam po prostu wstawić: if (sumacyfr(i) == 10)...

0 użytkowników online, w tym zalogowanych: 0, gości: 0