Pers.narod.ru. Алгоритмы. Минимальный модуль разности сумм элементов в правой и левой части массива |
Задан массив 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();
}
|
|