Pereiti prie turinio

Programa C kalboje, reikia patarimo :)


Rekomenduojami pranešimai

Reikia rasti tokius tris natūraliuosius skaičius m, n ir k, kurie sudarytų aritmetinę progresiją ir tenkintų šitokią lygybę (raidė a žymi bet kurį skaitmenį): m^2 - n^2 - k^2 = aaa. Pavyzdžiui, tokie skaičiai yra 53, 37 ir 21, nes 53^2 - 37^2 - 21^2 = 999. Sudarykite programą visiems tokiems skaičių trejetams rasti.

 

Neprašau rašyt visos programos, tiesiog gal galėtumėte užvesti ant kelio? Neturiu idėjų..

Redagavo infas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Uždavinį gali supaprastinti pasinaudojęs matematika.

 

Aritmetinė progresija pasižymi tuo, jog sekantis narys yra ankstesnio nario ir pastovaus dydžio suma:

 

21, 37, 53 yra tas pats kas 21, (21 + 16), (21 + 16 + 16)

 

Tuo pagrindu lygybę gali užrašyti taip:

 

3*d*d + 2*x*d - x*x = aaa

 

Toliau gali pabandyti išoriniame cikle keisti x vertę, vidiniame d ir tikrinti ar kairė pusė lygi vienam iš [111, 222, 333, 444, ..., 999].

 

Reikia rasti tokius tris natūraliuosius skaičius m, n ir k, kurie sudarytų aritmetinę progresiją ir tenkintų šitokią lygybę (raidė a žymi bet kurį skaitmenį): m^2 - n^2 - k^2 = aaa. Pavyzdžiui, tokie skaičiai yra 53, 37 ir 21, nes 53^2 - 37^2 - 21^2 = 999. Sudarykite programą visiems tokiems skaičių trejetams rasti.

 

Neprašau rašyt visos programos, tiesiog gal galėtumėte užvesti ant kelio? Neturiu idėjų..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pabandykim pažaist su matematika. Tegul mūsų mažiausias skaičius yra k, o skirtumas yra a, tuomet:

(k+2a)^2 - (k+a)^2 - k^2 = 2ak + 3a^2 - k^2, dabar ir tai tui būti lygu tam labai gražiam skaičiui b:

b = 2ak + 3a^2 - k^2

Pasprendę kvadratinę lygtį gaunam:

k = a -+ sqrt(4a^2 - b).

Rodos pagal tai nesunkiai galim rast pirmąjį skaičiuką tuo pačiu išspręsdami uždavinį. b statom turimus skaičius 111, 222, 333 ir t.t. Ir renkam, renkam.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galima gudriau.

 

Kaip jau minėta, lygybė gali būti perrašoma:

 

3*d^2 + 2*d*x - x^2 = aaa

 

Mažiausias aaa yra 111, didžiausias 999, todėl lygybė įmanoma, kol bus tenkinama nelygybė:

 

1000 > 3*d^2 + 2*d*x - x^2 > 100

 

Į nelygybę įstatant vis didesnius x pastebėsi, jog galimų d verčių intervalas vis siaurėja. Kai x peržengia maždaug 800, negalėsi parinkti tokios sveikos d vertės, kad nelygybė būtų patenkinama (trumpai tariant, x užtenka keisti iki 800).

 

Ačiū. Bet dabar naujas klausimas: kaip programai žinoti, kada jos vykdymas baigtas? Ar loop'int per visą int ilgį? Nes skirtingi skaičių trejetai gali duoti vienodus rezultatus, kaip suprantu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galima gudriau.

 

Kaip jau minėta, lygybė gali būti perrašoma:

 

3*d^2 + 2*d*x - x^2 = aaa

 

Mažiausias aaa yra 111, didžiausias 999, todėl lygybė įmanoma, kol bus tenkinama nelygybė:

 

1000 > 3*d^2 + 2*d*x - x^2 > 100

 

Į nelygybę įstatant vis didesnius x pastebėsi, jog galimų d verčių intervalas vis siaurėja. Kai x peržengia maždaug 800, negalėsi parinkti tokios sveikos d vertės, kad nelygybė būtų patenkinama (trumpai tariant, x užtenka keisti iki 800).

 

blemba, nepamąsčiau. ačiū :)

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ą...