Pereiti prie turinio

Skaičių išskirstymas


Rekomenduojami pranešimai

Sveiki, taigi biškį iškilo loginė problema, taigi reikia susikirstyti skaičių į dvi grupes, kuris susidaro iš 10 dalių.

 

Tai yra imkim pvz šiuos skaičius:

150
600
50
200
300
450
500
300
100
200

ir visus sudėjus gauname 2850, dabar reikia išskirstyti juos į dvi grupes, kad abiejų suma būtų kuo panašesnė (1425) (Reikia jog būtų po 5 skaičius grupėje).

 

Galvojau jog pasidaryti mažėjančia tvarka, ir išrinkti į pirmą grupę

 

galvojau jog susirašyti mažėjančia tvarka, ir tada kas antrą imti, bet vistiek netoks lygus gaunasi, šiaip išrinkus savo galva tai reiktų į vieną grupę imti štai šiuos skaičius (150+600+200+300+200 = 1450) o kita grupė lieka (50+300+450+500+100 = 1400) Mano galva lygiau neišeina padaryti, bet reikia lygties ar sprendimo būdo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tokia viena mintis toptelėjo, bet bijau kad tinka tik šitam atvejui. Na bet surašysiu. Sudėlioji didėjimo tvarka. Gautą imtį dalini per pusę ir turi:

 n, n+1, n+2, n+3, n+4 , t.y. 50, 100, 150, 200, 200,
o kita pusė bus m, m+1, m+2, m+3, m+4, t.y. 300, 300, 450, 500, 600.

SUMA1: n + (n+2) + (n+4) + (m+2) + (m+4) , t.y. 50 + 150 + 200 +450 + 600 = 1450
SUMA2: m + (m+1) + (m+3) + (n+1) + (m+3), t.y. 300+300+500+100+200 = 1400

 

Nežinau ar toks variantas tinka, bet sistema kažkokia yra, tik reikia tikrinti, ar nes su kitom sekom jau gali nesigauti. Čia tik šiaip pamintijimai prie kavos, tai jei labai ne į temą, prašau man atleisti. :)

Redagavo Silwen
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš šį uždavinį spręsčiau su rekursija. Nežinau ar tau reikia jį suprogramuoti ir jei taip, tai kokia kalba, bet galėčiau su C++ sprendimą parašyti.

Esmė tokia, kad reikia išbandyti visas įmanomas kombinacijas ir rasti artimiausią pusei, o tai daroma su rekursija. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

pabandyk :) gali aišku reikti korekcijų, nes vienu žingsniu atgal nuo _sum < medium, skaicius gali buti labai didelis


array(150, 600, 50, 200, 300, 450, 500, 300, 100, 200)

sum += each of array
medium = sum / count array

a = array
b = array

_sum = 0
foreach array as item   
   _sum += item
   if _sum < medium
       a push item
   else
       b push item

Redagavo meskew
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...