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(); }
гостевая; E-mail |