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

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 de boiustef
5

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.

Alte întrebări interesante