С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
TF
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 100
1

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

31.10.2013, 22:30. Просмотров 950. Ответов 4
Метки нет (Все метки)

массив из случайных целых чисел от -1000 до 1000. задача найти непрерывную часть этого массива чтобы сумма элементов была максимальной
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 22:30
Ответы с готовыми решениями:

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

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

Исправить программу, чтобы ее часть была представлена в виде функции
#include <stdio.h> int main () { int mas,m,i,j,n,a,b,c,d; printf ("Vvedite...

Найти непрерывную цепочку положительных элементов в масиве
Помогите написать код. Дан массив X из N целых чисел. Нужно найти самую...

На плоскости заданы 2n точек. Объединить их в пары так, чтобы сумма всех расстояний между точками была миниальной
На плоскости заданы 2n точек. Объединить их в пары так, чтобы сумма всех...

4
СашаН
271 / 270 / 145
Регистрация: 15.03.2012
Сообщений: 609
Записей в блоге: 1
01.11.2013, 00:08 2
Цитата Сообщение от TF Посмотреть сообщение
задача найти непрерывную часть этого массива чтобы сумма элементов была максимальной
A по русски можно? Что ты под этим подразумеваешь?
0
Новичок
Модератор
1512 / 981 / 465
Регистрация: 17.07.2012
Сообщений: 4,979
Завершенные тесты: 3
01.11.2013, 12:59 3
Так и понимать.Например есть массив,
2 3 -7 -8 9 3 -3 2 4
Тогда непрерывной частью с наибольшей суммой будет 9 3,непрерывная потому что нельзя взять 9 3 2 4,к примеру.
1
gng
828 / 569 / 173
Регистрация: 08.09.2013
Сообщений: 1,530
01.11.2013, 23:37 4
Цитата Сообщение от Новичок Посмотреть сообщение
Так и понимать.Например есть массив,
2 3 -7 -8 9 3 -3 2 4
Тогда непрерывной частью с наибольшей суммой будет 9 3,непрерывная потому что нельзя взять 9 3 2 4,к примеру.
Немного просчитались. В данном случае непрерывной частью с наибольшей суммой будет 9,3,-3,2,4
2
СашаН
271 / 270 / 145
Регистрация: 15.03.2012
Сообщений: 609
Записей в блоге: 1
02.11.2013, 03:22 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот рабочий код, правда не через рекурсию.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int *build_arr(unsigned lenght, int max, int min);
void print_arr(int *ptr, unsigned lenght);
void print_sequence(int *ptr, unsigned lenght);
 
int main(void)
{
   srand(time(NULL));
   unsigned arrlen = 15;
   int *arr = build_arr(arrlen, 1000, -1000);
   print_arr(arr, arrlen);
   print_sequence(arr,arrlen);
 
   free (arr);
   return 0;
}
 
int *build_arr(unsigned lenght, int max, int min) {
   int *ptr = malloc(sizeof(int)*lenght);
   if (ptr == NULL) {
      puts ("out of memory!");
      exit (1);
   }
   int *pos = ptr;
   while ((pos-ptr) < lenght) {
      *pos = rand() % (max * 2) + 1 + min;
      pos++;
   }
   return ptr;
}
 
void print_arr(int *ptr, unsigned lenght) {
   while (lenght--)
      printf("%i ", *ptr++);
   putchar('\n');
}
 
void print_sequence(int *ptr, unsigned lenght) {
   long max[2][lenght];
   int *pos;
   int i;
 
   for (i=0; i<lenght; i++) {
      pos = &ptr[i];
      long temp_max = 0;
      long counter = 0;
      while (pos < (&ptr[0] + lenght)) {
         counter += (*pos);
         if (counter > temp_max)
            temp_max = counter;
         ++pos;
      }
      max[0][i] = temp_max;
      pos = &ptr[i-1];
      temp_max? (counter = temp_max): (counter = *(pos+1));
      while (pos >= &ptr[0]) {
         counter += (*pos);
         if (counter > temp_max)
            temp_max = counter;
         --pos;
      }
      max[1][i] = temp_max;
   }
 
   int number = 0;
   pos = (int*)&max[1][0];
   for (i=0; i<lenght; i++)
      if (*pos < max[1][i]) {
         pos = (int*)&max[1][i];
         number = i;
      }
 
   while (1) {
      printf ("%i ", ptr[number]);
      if (max[1][number] == max[1][number+1])
         number++ ;
      else
         break;
   }
   putchar('\n');
}
0
02.11.2013, 03:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 03:22

Расставить числа 1...9 в пустые ячейки квадрата размером 3x3 так, чтобы сумма чисел в каждой строке, в столбце, а также по диагоналям была равна 15
Не правильно работает программа. Тема: матрица. Расставьте числа 1, 2, 3, 4,...

Найти число элементов массива, больших чем сумма соседей
нужно заполнить двухмерный массив(10*10)случайными числами от 1 до 255 и вывеси...

Найти количество пар элементов массива, сумма которых нечётна и положительна
Здравствуйте.Есть задача: Дан целочисленный массив из 20 элементов. Элементы...


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

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

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