online: 2; azi: 489; total: 52495 Manual clasa a xi a - Tehnici de programare - Divide et impera

Manual clasa a Xi a

Tehnici de programare

Divide et impera

Să se caute, într-un şir de numere întregi , în care mai întâi se găsesc numerele pare şi apoi numerele impar e, poziţia în care se găseşte , in şir , o valo are x citită de la tastatură.
# include < iostream >
using namespace std ;
int searchInOrderedArray ( int a[], int n, int x, int start, int end ) {
if (start > end ) {
return -1 ;
}
int mid = (start + end ) / 2 ;
if (a[ mid ] == x) {
return mid ;
}
if (a[ mid ] % 2 == 0 ) {
if (x % 2 == 0 && x < a[ mid ]) {
return searchInOrderedArray (a, n, x, start, mid - 1 );
} else {
int pos = searchInOrderedArray (a, n, x, mid + 1 , end );
return pos == -1 ? mid : pos ;
}
} else {
if (x % 2 != 0 && x > a[ mid ]) {
return searchInOrderedArray (a, n, x, mid + 1 , end );
} else {
int pos = searchInOrderedArray (a, n, x, start, mid - 1 );
return pos == -1 ? mid : pos ;
}
}
}
int main () {
int n;
cout << " Introduceti numarul de elemente din sir: " ;
cin >> n;
int a[n];
cout << " Introduceti elementele sirului (numere pare, apoi numere impare): " ;
for ( int i = 0 ; i < n; i++) {
cin >> a[i];
}
int x;
cout << " Introduceti valoarea cautata : " ;
cin >> x;
int pos = searchInOrderedArray (a, n, x, 0 , n - 1 );
if ( pos == -1 ) {
cout << "Valoarea " << x << " nu a fost gasita in sir.\n" ;
} else {
cout << "Valoarea " << x << " se afla pe pozitia " << pos + 1 << " in sir.\n" ;
}
return 0 ;
}