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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 13:59   #1
Renc
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 17
Радость Найти ту непрерывную последовательность положительных чисел....

Надо найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная.
Renc вне форума Ответить с цитированием
Старый 27.11.2012, 15:24   #2
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

есть наработки?
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 27.11.2012, 15:50   #3
Renc
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 17
По умолчанию

Наработки отсутствуют.
Renc вне форума Ответить с цитированием
Старый 27.11.2012, 16:38   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Renc

Надо найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная.
...
Наработки отсутствуют.


Хм, обычно тут таких сразу посылают в пешее эротическое платный раздел, но я сегодня добрый (((Ж

Код:
#include <iostream>
#include <locale>
#include <stdlib.h>
#include <time.h> 
#include <algorithm>
#include <functional>
#include <numeric>
#include <iterator>
#include <limits>
struct R { int operator()() const { return rand() % 21 - 10; } };  template <typename Iterator>
Iterator next(Iterator it) { std::advance(it, 1); return it; }  template <typename Iterator>
void print(Iterator begin, Iterator end) { typedef std::ostream_iterator<typename std::iterator_traits<Iterator>::value_type> O;
std::copy(begin, end, O(std::cout, " ")); std::cout << std::endl; } template <typename Iterator, typename F>
void find(Iterator begin, Iterator end, F f) { typedef typename std::iterator_traits<Iterator>::value_type T;
struct { T sum; Iterator begin, end; } max = { std::numeric_limits<T>::min(), begin, end }; std::cout <<
"All Sequence: " << std::endl; print(max.begin, max.end); for (; (begin = std::find_if(begin, end, f)) != end;)
{ Iterator seq_end = std::find_if(next(begin), end, std::not1(f)); T sum = std::accumulate(begin, seq_end, T());
if (sum > max.sum) { max.sum = sum; max.begin = begin; max.end = seq_end; } begin = seq_end; } if
(max.sum != std::numeric_limits<T>::min()) { std::cout << "Sequence with a maximum sum: " << std::endl;
print(max.begin, max.end); } else std::cout << "Sequence doesn't have positive numbers" << std::endl; }
int main() { std::locale::global(std::locale("")); srand((unsigned) time(NULL)); int arr[20]; std::generate(arr,
arr + sizeof(arr) / sizeof(arr[0]), R()); ::find(arr, arr + sizeof(arr) / sizeof(arr[0]), std::bind2nd(std::greater<int>(), 0));
return 0; }
Пример выполнения:
http://ideone.com/NpXvRU
Rififi вне форума Ответить с цитированием
Старый 27.11.2012, 16:40   #5
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

тот код что ты написал это называется добротой? )))
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 28.11.2012, 19:22   #6
Renc
Пользователь
 
Регистрация: 28.10.2012
Сообщений: 17
По умолчанию

спасибо за доброту)
Renc вне форума Ответить с цитированием
Старый 01.12.2012, 01:20   #7
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Без STL.
Код:
#include <stdio.h>


template<typename T> T* find_sumseq(T* f, T* l, T** e) {
	T n, s, *p, *a, *b;

	a = b = p = *e = NULL;
	for(n = s = 0; f != l; ++f) {
		if(*f > 0) {
			s += *f;
			b  = f + 1;
			if(! a)
				a = f;
		} else {
			if(s > n) {
				n  = s;
				p  = a;
				*e = b;
			}
			s = 0;
			a = NULL;
		}
	}

	if(s > n) {
		p  = a;
		*e = b;
	}
	return p;
}



int main(){
   int arr[] = { 1, 2, -1, 3, 4, 5, -2, 5, 10, 1, -4, 1, 2 };

   int* end;
   int* ptr = find_sumseq(arr, arr + sizeof(arr)/sizeof(arr[0]), &end);

   while(ptr != end) 
      printf("%d ", *ptr++);

   return 0;
}
Nuklon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти среднее арифметическое чисел, принадлежащих промежутку [A,B) и количество положительных чисел, стоящих на местах, кратных 4. edgeks Помощь студентам 0 18.11.2012 15:35
Найти количество положительных чисел среди четырёх целых чисел. teac2011 Помощь студентам 0 01.12.2011 19:58
Дана последовательность вещественных чисел. каждая пара чисел задает границы отрезка. Найти количество целых чисел на отрезках 'studentka' Помощь студентам 6 30.11.2011 18:35
Вводится 10 чисел. Найти среднее арифметическое положительных чисел и произведение отрицательных. Руся93 Помощь студентам 14 02.10.2011 13:12
текст. числа, разделённые пробелами. Найти количество положительных чисел. Удалить строку с min количеством чисел (на С) lady_koshe4ka Помощь студентам 0 30.06.2011 12:20