Нужно найти сумму элементов между первым и вторым положительными элементами, я сделал двумя способами. Что эффективнее?(Массив может быть любой длины, я взял 8 элементов)
int arr[] = {1,-5,-6,3,-85, -4, -9,-7};
int interval_sum = 0;
bool is_has_len = false;
int i = 0;
while(arr[i++]<=0 && i < 8); // находим номер первого отрицательного после положительного
while(arr[i]<=0 && i < 8) { // суммируем
interval_sum += arr[i++];
is_has_len = true;
}
if (!is_has_len) {
cout << "interval is null, we can not count a sum" << endl;
} else if (i == 8) {
cout << "Less than two 'plus' numbers, we can not count a sum" << endl;
} else {
cout << "sum is " << interval_sum << endl;
}
int arr[] = {-1,-5,-6,3,-85, 4, 9,7};
int interval_sum = 0;
bool is_count = false;
bool is_was_interval = false;
bool is_has_len = false;
for (int i = 0; i < 8; i++){
/* подсчет суммы элементов между первыми двумя положительными*/
if (!is_was_interval) {// если еще не было интервала
if (arr[i]>0 && is_count){ //если мы уже считаем и нам попалось положительное, то останавливаем счет
is_was_interval = true;
} else {
if (is_count) {
interval_sum += arr[i];
is_has_len = true;
}
if (arr[i]>0 && !is_count){// если положительное и не считали, то начинаем
is_count = true;
}
}
}
}
if (!is_has_len) {
cout << "interval is null, we can not count a sum" << endl;
} else if (!is_was_interval) {
cout << "Less than two 'plus' numbers, we can not count a sum" << endl;
} else {
cout << "sum is " << interval_sum << endl;
}
На первый взгляд эффективнее первый алгоритм из-за меньшего "объема", но там происходит двойная итерация массива.
Буду благодарен, если вы предложите более правильное решение.