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
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;
}