Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: agon   (31.08.2009 в 16:06)
Второй вариант был исправлен следующим образом


#include <iostream>
using namespace std;

int main()
{
const int M = 10;
const int M0 = M+1;//резервируем место для хранения барьерного элемента рядом с основным массивом!
int i = 0;
int k = 0;//барьерный элемент
int m[M0] = {0, 80, -4, -9, 0, 1, 4, 20, 10, 50, 0};//сразу включаем в массив барьерный элемент, 
   //но впоследствии оперируем массивом M

//Вывод массива на экран
for(i = 0; i < M; i++)
cout << m[i] << " ";

//Находим первый и последний нулевые элементы
int zero_b = 0, zero_e = 0;//первый и последний нулевые элементы
i = 0;
int sum = 0;

while(m[i] != k)
{
i++;
cout << "m[" << i << "] " << " = " << m[i] << endl;
}
if(i == M)
{
cout << "No zero\n";
}
else 
{
zero_b = i;
cout << "Number of first zero " << zero_b << endl;
i = M-1;
while(m[i] != 0)//проверяем с обратного конца
i--;
zero_e = i;
cout << "Number of last zero " << zero_e << endl;
cout << "-------------------\n";

//Сумма элементов массива, расположенных между 1 и последним нулевыми элементами
if(zero_b == zero_e || abs(zero_b - zero_e) == 1)
cout << "No interval. Sum = " << sum <<endl;
else
{
for(i = zero_b+1; i < zero_e; i++)
{
sum += m[i];
}
cout << "Sum between " << zero_b << " and " << zero_e << " zero elements is " << sum << endl;
}
}
return 0;
}


Вопрос в том, стоит ли искать последний элемент в отдельном цикле начиная с конца массива? Сильно ли мы экономим на количестве операций. Будет этот алгоритм эффективнее или нет?


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: