Tablica S CILAB

0

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ź?

0

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
0

Próbuje szukać rozwiązania bazując na podstawowych funkcjach

Co Masz na myśli? Poza tym rozwiązanie nie jest trudne:

  1. Liczysz sumę całej tablicy;
  2. Inicjalizujesz aktualną sume elementów z prawej, sRight do zera
  3. Iterujesz od końca, i w każdym ruchu dodajesz kolejny element tablicy do sRight, 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ę.
0

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:

  1. dany jest wektor a
  2. liczysz "skumulowaną sumę" b
  3. wybierasz te elementy wektora a, dla których odpowiadające im elementy w wektorze b są mniejsze lub równe połowie sumy (a suma to ostatni element wektora b)
a=[10,2,3,5,10]
b=cumsum(a)
a(b<=b(end)/2)

W Scilab zamień end na $

0
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);

1 użytkowników online, w tym zalogowanych: 0, gości: 1