Pascalban hogyan lehetne megvalósítani a következő feladatot:?
Istvánnak van N almája és K barátja. Mint jóbarát, mindenkinek szeretne adni egy almát. De mint
gyakorlatias diák, a gazdasági válság idején, spórolni akar magának úgy, hogy a lehető legnagyobb
tomegű alma maradjon neki.
_______________________________________________________
a bemeneti fájl elsős sorában két szám van N és K (1 ≤ K ≤ N ≤106
sorban N darab szám 1-től 105
) az almák és a barátok száma. A második
–ig, ami az almák súlyát jelenti.
________________________________________________________________
A kimeneti fájlban egy számot kell beírni, ami az Istvánnál marad almák összege, úgy hogy ez a lehető
legnagyobb.
PL Bemenet: (almák száma)5,(barátok száma) 3
9 4 6 1 3- az almák tömege
Kimenet: 15
Az úgy nem lenne jó mert nem biztos, hogy a legnagyobb tömegű almák maradnak meg neki.. Én addig eljutottam hogy sorba kell rendezni a tömbben a számokat (növekvő sorrendbe) és aztán indítunk egy ciklust ami k-tól n-ig összeadja a számokat.. de ez így nem teljesen jó mivel ezt nekem egy ellenőrző program vizsgálja és 11 teszt megy így végig.. És ez 44%-os teljesítmény! Ja és
Futási idő: 1 s
Méret: 128 M
Van egy tömböd, amiben az almák tömege van. Van K barátod. A tömbből kiveszed a K darab legkisebb tömegűt, a többi marad a Pistának.
Ha a tömböt (csökkenő) sorba raktad, akkor csak elhagyod az utolsó K elemét. A többit összeadod, és megvan a Pistának szánt almatömeg. Nem nehéz.
Szia.
Miért kell sorbarendezni ?
Szerintem sima minimumkiválasztás "K"-szor.
Igy mindig a legkissebb tömegű almát kapják a barátok (és a legnagyobb tömegűek maradnak meg).
Sok sikert.
Üdv.
Szia.
Nem kell törölni, csak egy speciális "értékkel" feltölteni, hogy a következő minimum kiválasztásnál ne vegye figyelembe.
A speciális érétk lehet pl. 0 (mivel 0 tömegű alma nincs). Akkor a minimum kiválasztás valahogy igy néz ki :
min:=255; //Ha bytos változót használsz
pos:=0; // minimum tömbön belüli poziciója.
For i:=1 to n do begin
_ _ if (tomb[i]<>0) and (tomb[i]<min) then begin
_ _ _ _ min:=tomb[i];
_ _ _ _ pos:=i;
_ _ end ;
end ;
tomb[pos]:=0;
AZ összesitésben szintén figyelembe kell venni a speciális érétkeket :
szum:=0;
for i:=1 to n do begin
_ _ if tomb[i]<>0 then szum:=szum+tomb[i];
end ;
Sok sikert.
Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!