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ăspunsuri la întrebare
#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];
}
modul 1 ia ultimele [putere] elemente din a si le pune crescator.
modul -1 ia ultimele [putere] elemente din b si le pune descrescator.
putere se injumatateste la fiecare ciclu de lucru.