Задача 2.3

1. Условие

Даны натуральное число n, действительные числа a1, а2, ... , аn. Получить

max(a1, a1 + а2, a1 + а2 + а3, ... ,a1 + a2 + ... + an).

2. Решение

Оператор программы задает количество элементов в массиве. Выделяется память под массив действительных чисел. Производится инициализация массива. В цикле определяется максимальное значение из следующих элементов:

a1, a1 + а2, a1 + а2 + а3, ... , a1 + a2 + ... + an,

и на экран выводится результат.

3. Алгоритм решения

4. Текст программы

1 :  #include <stdio.h> 
2 :  #include <alloc.h> 
3 :  #include <conio.h> 
4 :  void main( void ) 
5 :  { 
6 :      int i, n; 
7 :      float *a, s, ma; 
8 :      clrscr( ); 
9 :      printf( "\n\t\t Введите количество элементов n =" ); 
10:      scanf( "%d", &n ); 
11:      a=( float * )malloc( n*sizeof(float) ); 
12:      printf( "\n \t \t \t Введите элементы:" ); 
13:      for(i=0; i<n; i++) 
14:      { 
15:           printf( "\n \t \t \t \t a[%d] = ",i ); 
16:           scanf( "%f", &a[i] ); 
17:      } 
18:      s=a[0]; 
19:      ma=s; 
20:      for(i=1; i<n; i++) 
21:      { 
22:           s+=a[i]; 
23:           if(s>ma) 
24:                   ma=s; 
25:      } 
26:      printf( "\n \n \t max(a[1], a[1]+a[2], …, a[1] + a[2] + … + a[n]) = %g", ma ); 
27:      printf( "\n \n \n \t \t Для выхода нажмите любую клавишу." ); 
28:      getch( ); 
29:      free( a ); 
30:  }

5. Работа программы

Введите количество элементов n=5
Введите элементы:
a[0] = 1
a[1] = 3
a[2] = -4
a[3] = 6
a[4] = 2
max(a[0], a[0]+a[1], …, a[0]+a[1]+…+a[n-1])=8
Для выхода нажмите любую клавишу.

6. Проверка

Если n=5 и a[0]=1, a[1]=3, a[2]=-4, a[3]=6 и a[4]=2, то
max(1, 1+3, 1+3-4, 1+3-4+6, 1+3-4+6+2) или
max(1, 4, 0, 6, 8)=8
.

Хостинг от uCoz