Nickolay.info. Алгоритмы. Минимальный модуль разности сумм элементов в правой и левой части массива

Задан массив A размерности N, определить значение k, при котором сумма
|{A(1)+A(2)+…A(k)}-{A(k+1)+…+A(N)}|
минимальна (то есть минимален модуль разности сумм элементов в правой и левой части, на которые массив делится этим k).

#include <stdio.h>
#include <math.h>
 
void main () {
 const int n=6; //Размерность массива
 int k,k0,j,min,s1,s2;
 int a[n]={1,2,3,4,5,6}; //Задаем массив
 for (k=1; k<n-1; k++) { //Перебираем возможные значения k
  // Считаем суммы элементов с индексами меньше (s1) и больше (s2) k
  for (j=0, s1=0; j<k; j++) s1+=a[j];
  for (j=k+1, s2=0; j<n; j++) s2+=a[j];
  //Ищем миниммум и соответствующее значение k
  if (abs(s1-s2)<min) { min=abs(s1-s2); k0=k; }
 }
 printf ("\nK=%d, min=%d",k0,min);
 fflush (stdin); getchar();
}

Рейтинг@Mail.ru

вверх гостевая; E-mail