Răspuns :
Nu este corect deoarece mereu testezi doar primul element, ultimul element si mijlocul. Incearca sa urmaresti codul, instructiune cu instructiune, pentru un exemplu.
Iti prezint eu doua variante de rezolvare :
Varianta 1):
#include <iostream>
using namespace std;
int v[100];
bool divide(int v[], int n) {
if (n == 1)
return *v % 2 == 1;
else
return divide(v, n / 2) || divide(v + n / 2, n / 2 + n % 2);
}
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++)
cin >> v[i];
if (divide(v, n))
cout << "DA";
else
cout << "NU";
return 0;
}
Varianta 2) :
# include <iostream>
using namespace std;
int v[101];
bool divide(int v[], int st, int dr) {
if(st == dr) {
if(v[st] % 2 == 0)
return false;
else
return true;
}
else {
int mij = (st + dr)/2;
int i = divide(v, st, mij);
int j = divide(v, mij+1, dr);
if( i || j )
return true;
else
return false;
}
}
int main() {
int n, ok;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
if(divide(v, 1, n))
cout << "DA";
else
cout << "NU";
return 0;
}
Iti prezint eu doua variante de rezolvare :
Varianta 1):
#include <iostream>
using namespace std;
int v[100];
bool divide(int v[], int n) {
if (n == 1)
return *v % 2 == 1;
else
return divide(v, n / 2) || divide(v + n / 2, n / 2 + n % 2);
}
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++)
cin >> v[i];
if (divide(v, n))
cout << "DA";
else
cout << "NU";
return 0;
}
Varianta 2) :
# include <iostream>
using namespace std;
int v[101];
bool divide(int v[], int st, int dr) {
if(st == dr) {
if(v[st] % 2 == 0)
return false;
else
return true;
}
else {
int mij = (st + dr)/2;
int i = divide(v, st, mij);
int j = divide(v, mij+1, dr);
if( i || j )
return true;
else
return false;
}
}
int main() {
int n, ok;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
if(divide(v, 1, n))
cout << "DA";
else
cout << "NU";
return 0;
}