Informatică, întrebare adresată de andy7790, 8 ani în urmă

ajutor!!!
Cerința

Scrieți un program care să afișeze, în ordine crescătoare, toate numerele naturale formate din câte n cifre și care au suma cifrelor egală cu s, precum și câte astfel de numere există.

Date de intrare

Programul citește de la tastatură numerele naturale n și s, separate prin spații.

Date de ieșire

Programul va afișa numerele determinate pe prima linie a ecranului, în ordine crescătoare, separate prin câte un spațiu. Pe a doua linie va afișa numărul acestor numere. Dacă nu există astfel de numere, va afișa valoarea 0 pe prima linie a ecranului.

Restricții și precizări

1 ≤ n ≤ 7

1 ≤ S <= 63
#3074 PE PBINFO
DACA SE POATE O VREAU DE 100 DE PUNCTE.Mulțumesc

Răspunsuri la întrebare

Răspuns de ovdumi
3

Răspuns:

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

long int n, s, i, j, k, C = 0, suma, ck;

cin >> n;

cin >> s;

i = pow(10, n - 1);

j = pow(10, n) - 1;

for (k = i; k <= j; k++)

{

 suma = 0;

 ck = k;

 while (ck != 0)

 {

  suma = suma + ck % 10;

  ck = ck / 10;

 }

 if (suma == s)

 {

  cout << k << " ";

  C = C + 1;

 }

}

cout << endl;

cout << C;

return 0;

}

Explicație:

Am facut-o pe pbinfo dar imi da 80 de puncte, nu imi dau seama care e greseala dar daca ai vreo idee te rog sa-mi spui. Referitor la programul in sine, k este variabila cu care parcurgem numerele cu n cifre, "i" fiind cel mai mic numar cu n cifre, iar "j" cel mai mare. Il copiem pe k in variabila "ck", ca sa nu-i pierdem continutul, dupa care facem suma cifrelor. Daca este egala cu "s", il afisam pe k si contorul, care este "C", creste cu 1, intrucat trebuie sa-l afisam la final. Daca ai vreo intrebare, nu ezita sa mi-o adresezi :)


ovdumi: Am observat de ce imi da 80 de puncte, nu am luat in considerare cazul in care nu exista niciun numar cu suma cifrelor egala cu s. Poti sa pui tu imediat dupa citirea datelor if (s>9*n) { cout<<0; return 0; }, deoarece in cazul asta afiseaza 0 imediat dupa citire. In rezolvarea mea afiseaza un rand liber dupa datele de intrare inainte de afisarea lui 0.
ovdumi: 9*n este cea mai mare suma a cifrelor pe care o poate avea un numar de n cifre, acesta fiind 99..99 (9 apare de n ori)
ovdumi: apropo, poti sa mai pui in loc de long int doar int, nu e necesar
Alte întrebări interesante