Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

Подсчет подряд идущих отрицательных элементов - C++

11.01.2014, 21:07. Просмотров 638. Ответов 13
Метки нет (Все метки)

C 2 № 2908. Опишите на русском языке или на одном из языков программирования алгоритм подсчета максимального количества подряд идущих отрицательных элементов в целочисленном массиве длины 30.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main()
{
using namespace std;
const int N = 3;
int a[N];
int count = 0;
 
for (int i = 0; i < N; i++) cin >> a[i];
 
for (int i = 0; i < N; i++)
{
if (a[i] < 0 && a[i+1] < 0) count++;
if (i == N-1) break;
}
cout << count;
system("pause");
return 0;
}
Не проходит все проверки, если ввести, например -1, 0, -5 то показывает 1, что неверно (должно быть 0). Помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2014, 21:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчет подряд идущих отрицательных элементов (C++):

Количество подряд идущих отрицательных элементов - C++
Задание простое, просто хочу по-нормальному его растолковать. Дается целочисленный массив из 30 элементов, нужно подсчитать...

Подсчитать максимальное количество подряд идущих отрицательных элементов. - C++
Дан одномерный массив А, состоящий из N элементов. Подсчитать максимальное количество подряд идущих отрицательных элементов. Помогите,...

Найти в последовательности, количество пар подряд идущих отрицательных элементов - C++
Задача звучит так: Найти в последовательности чисел, заданных пользователем с клавиатуры, количество случаев, когда два члена подряд...

Посчитать максимальное количество подряд идущих отрицательных элементов в целочисленном массиве - C++
3) Посчитайте максимальное количество подряд идущих отрицательных элементов в целочисленном массиве длины 30.

Найти максимальное количество подряд идущих отрицательных элементов в заданном массиве - C++
Помогите решить задачу: 2. Опишите алгоритм подсчета максимального количества подряд идущих отрицательных элементов в целочисленном...

В заданном массиве подсчитать максимальное количество идущих подряд отрицательных элементов - C++
Помогите надо в 27-30 что то изменить чтобы работало Дан одномерный массив А, состоящий из N элементов. Подсчитать мак- симальное...

13
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
11.01.2014, 21:13 #2
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Не проходит все проверки, если ввести, например -1, 0, -5 то показывает 1, что неверно (должно быть 0). Помогите пожалуйста!
Почему 0, если 1? (это -1 или -5)
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
11.01.2014, 21:32  [ТС] #3
Цитата Сообщение от Dani Посмотреть сообщение
Почему 0, если 1? (это -1 или -5)
Они обязательно должны идти друг за другом, то есть -1, -2, 5 или например 5, -1, -8
0
Harmonster
9 / 9 / 3
Регистрация: 20.05.2012
Сообщений: 101
11.01.2014, 21:55 #4
Ввод 1: -2, -3, -4, 5, 3. Результат: 2
Ввод 2: -2, 5, 3, -4, 5. Результат: 0

Я понимаю, нужно так?

Цикл идет до n-1, чтобы при проверке последнего числа array[i+1] не выйти за границы массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
    int n = 5, counter = 0;
    int *array = new int[n];
    for (int i = 0; i < n; i++)
        cin >> array[i];
    for (int i = 0; i < n-1; i++)
    {
        if ((array[i] < 0) && (array[i + 1] < 0))
            counter++;
        if (i == n - 1) break;
    }
    cout << "Result: " << counter << endl;
}
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2014, 22:09 #5
Harmonster, я не проверял Ваш код, но и так вижу ошибку.
Попробуйте такой тест:
-2 -2 2 -2 -2
кстати вот это лишнее:
Цитата Сообщение от Harmonster Посмотреть сообщение
C++
1
if (i == n - 1) break;
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
11.01.2014, 22:09  [ТС] #6
Цитата Сообщение от Harmonster Посмотреть сообщение
Ввод 1: -2, -3, -4, 5, 3. Результат: 2
Ввод 2: -2, 5, 3, -4, 5. Результат: 0

Я понимаю, нужно так?

Цикл идет до n-1, чтобы при проверке последнего числа array[i+1] не выйти за границы массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
    int n = 5, counter = 0;
    int *array = new int[n];
    for (int i = 0; i < n; i++)
        cin >> array[i];
    for (int i = 0; i < n-1; i++)
    {
        if ((array[i] < 0) && (array[i + 1] < 0))
            counter++;
        if (i == n - 1) break;
    }
    cout << "Result: " << counter << endl;
}
А в чем разница с моим кодом? Не могу разобрать.
Неверное значение показывает только в моем случае, так с числом N = 3 Работает нормально
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2014, 22:14 #7
CHELOVEKPAUK, Вы лучше дайте пояснение, а то после вот этого:
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Не проходит все проверки, если ввести, например -1, 0, -5 то показывает 1, что неверно (должно быть 0).
Цитата Сообщение от Dani Посмотреть сообщение
Почему 0, если 1? (это -1 или -5)
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Они обязательно должны идти друг за другом, то есть -1, -2, 5 или например 5, -1, -8
не совсем понятно.
Вот тест:
-2 -3 -2 5
что должно вывести 2 или 3?
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
11.01.2014, 22:14  [ТС] #8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Harmonster, я не проверял Ваш код, но и так вижу ошибку.
Попробуйте такой тест:
-2 -2 2 -2 -2
кстати вот это лишнее:
3 показал
0
FreShard1
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 6
11.01.2014, 22:17 #9
В общем там проблема в том что когда i доходит до последнего элемента, то i + 1 присваеваеться какоето неведомое число что-то около -8534...... так что надо было сделать count-1 при выводе, вроде помогло (
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include<iostream>
#include<cstdlib>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"rus");
    int i,b=0;
    int a[3];
    for(i=0;i<3;i++)
    {
        cin>>a[i];
    }
    for(i=0; i<3;i++)
    {   
        if (a[i] < 0 && a[i+1] < 0)
            {
                b++;
            }
    }   
    cout<<endl<<"Встречается "<<(b-1)<<" раз"<<endl;
    system("pause");
    return 0;
}
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2014, 22:22 #10
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
3 показал
Это вы лукавите, должно вывести 2.
А на вопрос в посте №7 так и не ответили ?
1
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
11.01.2014, 22:34  [ТС] #11
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Это вы лукавите, должно вывести 2.
А на вопрос в посте №7 так и не ответили ?
да, я не тот тест сделал. ваш тест показал 2.
а вся проблема заключается в том, когда минусы стоят на концах а не идут друг за другом, все равно выводится 1.
и кстати тест -2 -2 2 -2 -2 показывает 3, что тоже неправильно.
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2014, 22:38 #12
Тогда еще раз:
что нужно выводить при таком тесте:
-1 -1 -1 2
2 или 3?
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
12.01.2014, 09:55  [ТС] #13
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Тогда еще раз:
что нужно выводить при таком тесте:
-1 -1 -1 2
2 или 3?
Вывело 2.

Не по теме:

вот так попадется на егэ задачка - и ни балла не получишь

0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
12.01.2014, 10:59 #14
CHELOVEKPAUK,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
#include <type_traits>
 
template<typename _TypeIter>
size_t count(_TypeIter first, _TypeIter last)
{
    //static_assert(std::is_pointer<_TypeIter>::value,
    //              "Type iterator must be pointer type.");
    //static_assert(std::is_arithmetic<std::remove_pointer<_TypeIter>::type>::value,
    //              "Poited type must be arithmetic.");
 
    size_t res = 1, tmp = 0;
    while (first != last)
    {
        //typedef decltype(*first) _Type;
        *first++ < 0 ? ++tmp : tmp = 0;
        res = std::max(res, tmp);
    }
 
    return res < 2 ? 0 : res;
}
 
int main(int argc, char* argv[])
{
    //int a[] = {1,2,3,4,-1,-1,0,1,2,3,4,0};
    //std::vector<int> a = {1,2,3,4,-1,-1,0,1,2,3,4,0};
    std::vector<std::string> a = {"213", "123123", ""};
 
    std::cout << count(std::begin(a), std::end(a));
}
В целом - работает. Комменты это мои жалкие потуги делать проверку на наличие интерфейсов сравнения и приведения типов, но потом понял что все это и так делает компилятор, оставил чисто что-бы понять что я хотел еще прикрутить (:
1
12.01.2014, 10:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2014, 10:59
Привет! Вот еще темы с ответами:

Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент - C++
В одномерном массиве A=(a1, а2, ..., аn) все группы элементов, содержащие более 3-х подряд идущих отрицательных элементов, заменить на...

Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент - C++
В одномерном массиве A=(a1, а2, ..., аn) все группы элементов, содержащие более 3-х подряд идущих отрицательных элементов, заменить на...

Определить, максимальное количество подряд идущих отрицательных членов последовательности. - C++
Вводится натуральное число N, а затем последовательность N чисел. Определить, максимальное количество подряд идущих отрицательных членов...

Составить программу, которая подсчитывает, наибольшее число отрицательных идущих подряд в массиве чисел - C++
Добрый день,я составил программу по такому условию :&quot;Дан одномерный массив А, состоящий из N целых чисел. Составить программу, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.