Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2011, 15:52   #1
KillJoy
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 20
По умолчанию c++ массив

Дан массив размером N.Подсчитать максимальное количество подряд идущих элементов, каждый из которых больше предыдущего.
KillJoy вне форума Ответить с цитированием
Старый 04.07.2011, 16:17   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

И в чем проблема?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 04.07.2011, 16:43   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

KillJoy

дан массив размером N.Подсчитать максимальное количество подряд идущих элементов, каждый из которых больше предыдущего.

что-то типа того...

Код:
#include <algorithm>
#include <functional>

#include <iterator>
#include <iostream>

#include <locale>

template <typename T, typename U>
void find(const T* arr, const size_t N, U u)
{
	typedef typename std::allocator<T>::const_pointer iterator;
	typedef typename std::iterator_traits<iterator>::difference_type difference_type;

	iterator curr = &arr[0], next, found = arr + N;
	difference_type max_seq = 0;

	for ( ; (next = std::adjacent_find(curr, arr+N, u)) != arr+N; curr = ++next)
	{
		const difference_type curr_length = std::distance(curr, next) + 1;
		if (curr_length > max_seq)
		{ max_seq = curr_length; found = curr; }
	}

	const difference_type last_length = std::distance(curr, next);
	if (last_length > max_seq)
	{ max_seq = last_length; found = curr; }

	std::cout << "Самая длинная последовательность:" << std::endl;
	std::copy(found, found + max_seq, std::ostream_iterator<T>(std::cout, " "));
}

int main()
{
	setlocale(LC_ALL, "");

	int arr[] = {
		1,2,
		1,2,3,
		1,2,3,4,5,
		-1,0,1,
		6,7,8,9,10,
		1,
		0,1,2,3,4,5,
		1,2,
	};

	find(arr, sizeof(arr)/sizeof(arr[0]), std::greater<int>());

	return 0;
}
Пример работы программы: http://liveworkspace.org/code/8c01ff...3af3a5c5102826
Rififi вне форума Ответить с цитированием
Старый 04.07.2011, 16:51   #4
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

template - а это что шаблон?
VintProg вне форума Ответить с цитированием
Старый 04.07.2011, 16:58   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да шаблон.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.07.2011, 17:21   #6
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

Ну вы парни угараете. человек не знает что с простым массивом делать а вы ему STL втыкаете
Kukurudza вне форума Ответить с цитированием
Старый 04.07.2011, 17:57   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ага, тем более что здесь и без STL всё легко решается.

Если я правильно понял условие, то вот...(знайте, я фанат извращенских решений )

Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    srand(time(0));
    int arr[15];
    for (int i = 0;i<15;i++)
    {
        arr[i] = rand()%10;
        cout << arr[i] << " ";
    }
    cout << endl;
    bool myb = false;
    int prev = 1;
    int x = 1;
    for (int j = 1;j<15;j++)
    {
        if (arr[j] > arr[j-1])
        {
            if (!myb) myb = !myb;
            x++;
        }
        else
        {
            myb = false;
            if (x > prev) prev = x;
            x = 1;
        }
    }
    cout << prev;
    cin.get();
    return 0;
}
P.S. Запустил пару раз, вроде правильно работает.

Последний раз редактировалось _-Re@l-_; 04.07.2011 в 18:14.
_-Re@l-_ вне форума Ответить с цитированием
Старый 04.07.2011, 18:16   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include <stdlib.h>
#include <time.h>
если современный С++, то заменить на
Код:
#include <cstdlib>
#include <ctime>
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.07.2011, 18:18   #9
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
если современный С++, то заменить на
Учту
И ещё я учитывал, что 1 - минимальное решение данной задачи.
_-Re@l-_ вне форума Ответить с цитированием
Старый 04.07.2011, 21:49   #10
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Как же без шаблона? Ведь тип элементов был не указан.
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06