👤
a fost răspuns

Nu ma descurc cu aceasta problema. Ma puteti ajuta va rog?
Se dă un număr natural n despre care se cunoaște că este putere de 2. Considerăm inițial șirul numerelor naturale de la 1 la n așezate în ordine crescătoare. Notăm cu A acest șir. Pornind de la acesta, se construiește un nou șir (să îl notăm cu B) astfel: Primele n elemente ale lui B sunt chiar elementele șirului A în aceeași ordine. Următoarele n/2 elemente ale lui B sunt ultimele n/2 elemente ale lui A dar scrise în ordine inversă (descrescător). Următoarele n/4 elemente ale lui B sunt ultimele n/4 elemente ale lui A scrise în ordine crescătoare, următoarele n/8 elemente ale lui B sunt ultimele n/8 elemente ale lui A scrise în ordine descrescătoare, și tot așa, cu fiecare putere de 2 (notată p) ce apare la numitor, luăm ultimele n/p elemente din A și le adăugăm la finalul lui B alternând ordinea de parcurgere, de la o putere la alta conform modului descris mai sus. Se mai să un număr poz. Se cere determinarea numărului de pe poziția poz din șirul B.


Răspuns :

#include <iostream>

using namespace std;

int main(){

   int n,i;

   int a[100];

   int b[200];

   cout << "Introduceti n : ";

   cin >> n;

   for (i=1;i<=n;i++) a[i] = i;

   int mod = 1;

   int putere = n;

   int predec = 1;

   while (putere>0){

       if (mod==1){

           for (i=1;i<=putere;i++){

               b[i+predec] = a[n-putere + i];

           }

       }

       else {

           for (i=1;i<=putere;i++){

               b[i+predec] = a[n+1-i];

           }

       }

       predec = predec + putere;

       putere = putere/2;

       mod = mod * -1;

   }

   for(i=2;i<=predec;i++) cout << b[i] << " ";

   int poz;

   cout << "\nPozitie : ";

   cin >> poz;

   cout << "Elementul de pe pozitia " << poz << " = " << b[poz+1];

}