Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: agon (29.08.2009 в 11:47) Здравствуйте, решаю следующую задачу на С++. В одномерном массиве, состоящем из целых элементов найти сумму элементов, расположенных между первым и последним нулевыми элементами. Задача распадается на две части: 1) найти нулевые элементы 2) посчитать сумму между ними. Я вижу два решения. Одно кажется проще, второе должно быть эффективнее, потому что в лучше случае не нужно проходить весь массив от начала до конца. Дайте, пожалуйста, совет, какой вариант предпочтительнее и почему? Выявилось различие в работе компиляторов. В среде CodeBloks (компилятор gсс) работают оба кода. В VS C++ 6 работает только первый. Во втором прием барьерного элемента не срабатывает. Никто не знает, почему? Первый вариант. Без барьерного элемента
#include <iostream> using namespace std; int main() { const int M = 10; int i = 0; int m[M] = {10, 0, -4, -9, 1, 1, 4, 20, -3, -31}; //int m[M] = {-1, 0, 0, 1, 1, 0, 1, 1, 1, 1}; //Вывод массива на экран for(i = 0; i < M; i++) cout << m[i] << " "; //Находим первый и последний нулевые элементы int zero_b = -1; int zero_e = -1; for(i = 0; i < M; i++) { if(m[i] == 0) { zero_e = i; if(zero_b == -1) zero_b = i; } } if(zero_b == -1 && zero_e == -1) cout << "There is no zero elements\n"; else { cout << "Number of first zero element = " << zero_b << endl; cout << "Number of last zero element = " << zero_e << endl; } //Сумма элементов массива, расположенных между 1 и последним нулевыми элементами int sum = 0; if(zero_b == -1 && zero_e == -1) { return 0; } else { for(i = zero_b+1; i < zero_e; i++) { sum += m[i]; } cout << "Sum of elements between " << zero_b << " and " << zero_e << " zero elements = " << sum << endl; } return 0; }
#include <iostream> using namespace std; int main() { const int M = 10; int i = 0; int m[M] = {50, 80, -4, -9, 0, 1, 4, 20, 10, 0}; //Вывод массива на экран for(i = 0; i < M; i++) cout << m[i] << " "; //Находим первый и последний нулевые элементы int zero_b = 0, zero_e = 0;//первый и последний нулевые элементы i = 0; int k = 0;//барьерный элемент m[M] = k; cout << "Barrier m[" << M << "] = " << m[M] << endl; cout << "-------------------\n"; int sum = 0; while(m[i] != k) { i++; cout << "m[" << i << "] " << " = " << m[i] << endl; } if(i == M) { cout << "There is no zero elements\n"; } else { zero_b = i; cout << "Number of first zero element = " << zero_b << endl; i = M-1; while(m[i] != 0)//проверяем с обратного конца i--; zero_e = i; cout << "Number of last zero element = " << 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 of elements between " << zero_b << " and " << zero_e << " zero elements = " << sum << endl; } } return 0; }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: