Răspuns :
#include <vector>
#include <iostream>
using namespace std;
main()
{
int x,c;
cin >> x;
vector <int> a(1);
a[0]=1;
while (true) //ciclu infinit
{
if (a.size() % 2 ==1) a.push_back(a[a.size()-1]+1);
//daca nr de elemente in vector e impar atunci noi adaugam unul ci indece par
//a.size()-1 - indecele ultimului element
else a.push_back(a[a.size()-2]*2+1);
if (a[a.size()-1]>x)
//daca elementul adaugat e mai mare ca, il stergem si finisam ciclul
{
a.pop_back();
break;
}
}
for (int i=a.size()-1; i>=0; i--)
cout << a[i] << ' ';
}
#include <iostream>
using namespace std;
main()
{
int x,c;
cin >> x;
vector <int> a(1);
a[0]=1;
while (true) //ciclu infinit
{
if (a.size() % 2 ==1) a.push_back(a[a.size()-1]+1);
//daca nr de elemente in vector e impar atunci noi adaugam unul ci indece par
//a.size()-1 - indecele ultimului element
else a.push_back(a[a.size()-2]*2+1);
if (a[a.size()-1]>x)
//daca elementul adaugat e mai mare ca, il stergem si finisam ciclul
{
a.pop_back();
break;
}
}
for (int i=a.size()-1; i>=0; i--)
cout << a[i] << ' ';
}
Ti-am facut o sursa C++, fara vectori dinamici la fel de eficienta ca si cea trimisa mai sus. Pentru sortare descrescatoare am folosit sort-ul din STL. Succes!
#include <iostream>
#include <algorithm>
bool cmp(const int nr1, const int nr2)
{
return nr1>nr2;
}
using namespace std;
long long a,b,k,i,c,n,v[1000];
int main()
{
cin>>n;
a=1;
b=2;
c=3;
i=3;
v[++k]=a;
while(a<=n)
{
i++;
a=b;
b=c;
if(i%2==0) c=1+b;
else c=1+2*a;
if(a<=n) v[++k]=a;
}
sort(v+1,v+k+1,cmp);
for(i=1;i<=k;i++) cout<<v[i]<<" ";
return 0;
}
#include <iostream>
#include <algorithm>
bool cmp(const int nr1, const int nr2)
{
return nr1>nr2;
}
using namespace std;
long long a,b,k,i,c,n,v[1000];
int main()
{
cin>>n;
a=1;
b=2;
c=3;
i=3;
v[++k]=a;
while(a<=n)
{
i++;
a=b;
b=c;
if(i%2==0) c=1+b;
else c=1+2*a;
if(a<=n) v[++k]=a;
}
sort(v+1,v+k+1,cmp);
for(i=1;i<=k;i++) cout<<v[i]<<" ";
return 0;
}