va rog
Scrieţi un program C/C++, care citeşte de la tastatură un număr natural n (n≤1000) şi
afişează pe ecran, separaţi prin câte un spaţiu, primii n termeni ai şirului:
1, 2,1, 3,2,1, 4,3,2,1, ...
construit astfel: prima grupă este formată din numărul 1, a doua grupă este formată din
numerele 2 şi 1, etc. Grupa a k-a, este formată din numerele k, k-1,..., 1.
Exemplu: pentru n=8 se vor afişa valorile 1 2 1 3 2 1 4 3.
multumesc
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int n, num, g, s;
int main()
{
cout << "n= "; cin >> n;
cout << "sirul creat cu n termeni: " << endl;
g=1; s=0;
while (s+g<n)
{
for (num=g; num>0; --num)
cout << num << " ";
s=s+g; ++g;
}
int dif=n-s;
num=g;
for (int i=1; i<=dif; ++i)
cout << num-- << " ";
return 0;
}
Explicație:
conform enunţului şirul e foemat din grupuri:
(1)(21)(321)(4321)(54321)...
variabila n reprezintă nr. de termeni ai şirului, dacă n=10, atunci avem toţi termenii din patru grupe (1+2+3+4=10, în primul grup este 1 număr, în al doilea 2 numere, în al treilea 3 numere şi în al patrulea 4 numere)
Folosesc variabila s care face suma sirului Gauss şi variabila g ce reprezintă grupul
variabila num e de lucru. În caz că s+g e mai mare ca n atunci folosesc variabila dif pentru a vedea câţi termeni din următorul grup au rămas de afişat.