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

Un număr natural nenul n se numește norocos dacă pătratul lui se poate scrie ca sumă de n numere naturale consecutive. Exemplu:

3 deoarece 3 * 3 = 2 + 3 + 4

7 deoarece 7 * 7 = 4 + 5 + 6 + 7 + 8 + 9 + 10

Cerința
Se dă un număr natural n. Dacă numărul este norocos afișați cele n numere consecutive care adunate dau pătratul acestuia.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Daca n este norocos, programul va afișa pe ecran cele n numere consecutive care adunate dau n * n, separate prin spații. In caz contrar, programul va afișa mesajul NU ESTE NOROCOS

Restricții și precizări
1 ≤ n ≤ 1000

Răspunsuri la întrebare

Răspuns de uleiaalex
2

Sa iti fie de folos. L-am facut in C++. Am folosit o forma mai nelineara. As recomanda cand ai timp sa incerci sa il faci cu backtraking.

#include <iostream>


using namespace std;


void Afisare(long* a,int n)

{

   cout<< "DEBUG: ";

   int i=0;

   while(i<n && a[i]!=0)

   {

       cout<<a[i]<<" "<<endl;

       i++;

   }

   cout<<endl;

}


int main()

{

  int n;

  cin>>n;

  long *a;

 

  bool gasit = false;

 

  cout<<"DEBUG: n="<<n<<endl;

 

  for(long i = 1;i<=2*n;i++)

  {

      long s = 0;

      a = new long[2*n];

     

      int index = 0;

     

      for(long j=i;i<=n*n/2 && s < n*n;j++)

      {

          s+=j;

          a[index] = j;

          index++;

      }

      if(s==n*n)

      {

          gasit = true;

          break;

      }

  }

 

   if(gasit)

      Afisare(a,2*n);

   else

      cout<<"DEBUG: NU ESTE NOROCOS!";

 

  cout<<endl<<"DEBUG: Gata!";

 

  return 0;

}

Alte întrebări interesante