22. marts 2005 - 19:14
Der er
3 kommentarer og
1 løsning
finde en bestemt sum i array
Jeg har et Array med tallene: 9,8,6,1,1,2,1,6,13
tag det første tal og undersøg om det er mindre end 20
tag det næste tal og læg det til det første tal, undersøg om det er mindre end 20
hvis det er større end 20 gå da videre til næste tal osv.
hvis tallet 20 nåes eller hvis der ikke er flere tal i Array, bliver dette til RES1.
Start forfra, men ikke med de tal der er blevet brugt til RES1.
Hvordan finder jeg frem til dette resultat
RES1 := (9,8,1,1,1)=20
RES2 := (6,2,6)=14
RES3 := (13)=13
Håber at jeg har forklaret mig OK
22. marts 2005 - 23:27
#2
Det må kunne gøres mere enkelt. Men det virker:
type
TRES = array of integer;
procedure BeregnRES(Tal : array of integer; var RES : TRES);
var
TalLeft : integer;
function GetRES : integer;
var
i,x : integer;
begin
x:=0;
for i:=0 to length(Tal)-1 do
begin
if (x+Tal[i]<=20) and (Tal[i]>0) then
begin
x:=x+Tal[i];
Tal[i]:=0;
Dec(TalLeft);
end;
if x=20 then
break;
end;
Result:=x;
end;
begin
TalLeft:=Length(Tal);
while TalLeft>0 do
begin
SetLength(RES,Length(RES)+1);
RES[Length(RES)-1]:=GetRES;
end;
end;
//------------------------
procedure TForm1.Button1Click(Sender: TObject);
const
Tal : array(.0..8.) of integer = (9,8,6,1,1,2,1,6,13);
var
RES : TRES;
i : integer;
begin
BeregnRES(Tal,RES);
for i:=0 to length(RES)-1 do
Showmessage('RES'+inttostr(i+1)+'='+IntToStr(RES[i]));
end;