Un approccio alterantivo puo' essere il seguente : osservando che la condizione è soddisfatta se un elemento è pari alla somma di tutti gli altri nella sottosequenza , ne discende che la somma degli elementi della sottosequenza è il doppio di quell'elemento . Per cui , detto max il maggiore di tutti gli elementi e somma la somma della sottosequenza deve risultare verificata la condizione somma=2*max , e quindi l'algoritmo risultante sarà il seguente :
codice:var a[n]:array of integer ; b[blocchi] : array of boolean; i,j,k,l,m,n,blocchi,max,somma: integer; begin blocchi:=n/k; for i:=0 to blocchi-1 do begin l:=i*k; m:=l+k; max=a[l]; somma:=0; {calcola la somma e il max di ogni blocco} for j:=l to m do begin somma:=somma+a[j]; if max>a[j] then max:=a[j]; end; {verifica se la somma è il doppio del max} if somma=2*max then b[i]:=TRUE else b[j]:=FALSE; end; end.![]()

Rispondi quotando