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.

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