Informatică, întrebare adresată de bebeflorina, 9 ani în urmă

Urgent si fara vectori va rog..
Cerinţa
Se consideră şirul 1, 2,1, 3,2,1, 4,3,2,1, ..., în care prima grupă este formată din numărul 1, a doua grupă este formată din numerele 2,1, …, a k-a grupă este formată din numerele k,k-1,...,2,1.

Pentru un număr natural dat n, să se determine al n-lea termen din şir.

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

Date de ieşire
Programul va afişa pe ecran numărul x, reprezentând al n-lea termen din şir.

Restricţii şi precizări
1 ≤ n ≤ 1.000.000.000

Răspunsuri la întrebare

Răspuns de licr
5
#include<iostream>
 #include<cmath>
 using namespace std;
 int main() {
 long long n,k,d;
  cin>>n;
  d=1+8*n;
   k=(-1+sqrt(d))/2;
   if(k*(k+1)/2==n) cout<<1;
  else{ k++; cout<<1+k*(k+1)/2-n; }
 return 0; }

Lascau: #include <iostream>

using namespace std;

int main()
{
long n;
int x,f1=2,f2=3,nr=2,i;
 cin>>n;
 if (n==1) cout<<"1";
 else
 {
  while (f1<n && f2<n) 
  {
      f1=f1+nr;     // cu while-u asta caut in ce grupa se afla numarul meu
      f2=f2+nr+1;
      nr++;             
  }
 for (i=nr; i>=1; i--)  // odata ce am gasit grupa observam ca fiecare grupa incepe cu nr grupei(ex pt nr=5 avem grupa de elemente 5 4 3 2 1)
 {
   if (f1==n){
        x=i;}   //stiu ca numarul meu e cuprins intre f1 si
Alte întrebări interesante