Problem:
Podziel tablicę na dwie części (równe). Ma to działać na zasadzie sumowania liczb.
np. [10,2,3,5,10]. czyli teoretycznie wynik: [10,2,3] [5,10]
Istnieje gotowa funkcja czy korzystać z (pętli, warunku)?
Jakaś podpowiedź?
Problem:
Podziel tablicę na dwie części (równe). Ma to działać na zasadzie sumowania liczb.
np. [10,2,3,5,10]. czyli teoretycznie wynik: [10,2,3] [5,10]
Istnieje gotowa funkcja czy korzystać z (pętli, warunku)?
Jakaś podpowiedź?
Jak ma wyświetlać indeks ostatniej liczby 1 tabeli to masz źle, bo z reguły tablice liczymy od 0
, więc tutaj indeksem jest 2
def split_sum(list) do
total = Enum.sum(list)
find_idx(list, 0, 0, total)
end
defp find_idx([hd | _], idx, partial_sum, rest)
when hd + partial_sum == rest - hd, do: idx
defp find_idx([hd | tl], idx, partial_sum, total)
when hd + partial_sum < total - hd, do: find_idx(tl, idx + 1, partial_sum + hd, total - hd)
defp find_idx(_, _, _, _), do: :impossible
Próbuje szukać rozwiązania bazując na podstawowych funkcjach
Co Masz na myśli? Poza tym rozwiązanie nie jest trudne:
sRight
do zerasRight
, jednoczesnie odejmując ten element od sumy całości (przez co staje sie ona sumą części lewej), wykonujesz porównanie, i jeśli prawdziwe, masz indeks dzielący tablicę.Jeśli przyjmiemy, że to faktycznie trywialne zadanie w którym da się podzielić tablicę na część "lewą" i "prawą", to w matlabopodobnych językach możesz zrobić tak:
a=[10,2,3,5,10]
b=cumsum(a)
a(b<=b(end)/2)
W Scilab zamień end na $
tb=[10,2,3,5,10];
p=1;
k=numel(tb);
sp=0;
sk=0;
while p<k
if sp<=sk
sp=sp+tb(p);
p=p+1;
else
sk=sk+tb(k);
k=k-1;
end
end
fprintf("%d\n",p);