Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki,

 

Lyg neradau, kad būtumėt diskutavę apie įdomų projectą ProjectEuler.net. Trumpai tariant, tai ten glūdi šimtai matematinių uždavinių-problemų, kurioms išspręsti teks pasitelkti programavimo įgūdžius. Taip pat viską optimizuoti padeda ir matematikos išmanymas, tačiau blogiausiu atveju galima ir be to.

 

Ten esantys uždaviniai labai stipriai padeda praktikuojantis rašyti našius algoritmus. Ir bent jau pirmos užduotys tikrai tinka pradedantiems programuotojams, kaip papildoma praktika.

 

Taigi, ar yra tokių, kurie bando išlukštent ProjectEuler.net užduotis? Galėtume čia pasidalinti patarimais, rast geresnius būdus problemoms išspręsti.

 

ProjectEuler tinklalapis

Redagavo respo
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šaunus puslapis :) Bet arba aš darau visiškas kvailas logines klaidas arba kažkas blogai su puslapiu.

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

 

Find the sum of all the multiples of 3 or 5 below 1000.

Sprendimas:

$i = 1;
$sum = 0;
while ($i <= 1000) {
if($i%3==0 or $i%5==0){
	$sum = $sum + $i;
}
$i++;
}
echo $sum;

Ats.: 234168 ir jis netinka

 

Tas pats ir su antru uždavinuku.

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

 

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

 

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Sprendimas:

$i = 1;
$sum = 0;
while($i <= 100){
if($i <=2){
	$a[$i] = $i;
} else {
	$a[$i] = $a[$i-1] + $a[$i-2];
}
if($a[$i] > 4000000){
	break;
} else {
	$sum = $sum + $a[$i];
}
$i++;
}
echo $sum;

Ats.: 9227463 deja neteisingas :(

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vat taip ir būna su šitom užduotim - reikia labai įsiskaityti. Vakar kelias valandas laužiau galvą ties 12 užduotim. Atrodo viską gerai padarau, bet skaičiuoja "begalybę" laiko, nors turi per sekundės dalį išmest atsakymą. O klaida buvo labai elementarioj vietoj - sumaišiau kintamuosius ir skaičiavimų buvo atliekama n kartų daugiau, nei reikėjo. Nenoriu tikslių atsakymų čia talpint, kad visi besidomintys patys visų pirma išspręstų. Bet jei galėsiu padėt, tai būtinai padėsiu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ech, kazkaip antras neiseina su Fibonacci seka

Stai kiek padariau:

#include <iostream>
using namespace std;
int main ()
{
  int i, suma, a, b, c;
  a= 1;
  b= 2;
  suma = 0;
  c = 0;
  for (c = 1; c <= 4000000; i++){
     c = a + b;
     a = b;
     b = c;
     suma = suma + c;
     cout << suma << endl;
  }
  cout << "suma : " << suma << endl;
  return 0;
}

Ats. gaunas 14930347, kad nors parodytu koks turi but atsakymas, galima nors butu orientuotis ar tik truputi klysti, ar visiskai i pievas nuklydai..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ech, kazkaip antras neiseina su Fibonacci seka

Stai kiek padariau:

#include <iostream>
using namespace std;
int main ()
{
  int i, suma, a, b, c;
  a= 1;
  b= 2;
  suma = 0;
  c = 0;
  for (c = 1; c <= 4000000; i++){
     c = a + b;
     a = b;
     b = c;
     suma = suma + c;
     cout << suma << endl;
  }
  cout << "suma : " << suma << endl;
  return 0;
}

Ats. gaunas 14930347, kad nors parodytu koks turi but atsakymas, galima nors butu orientuotis ar tik truputi klysti, ar visiskai i pievas nuklydai..

Pas tave taip pat nematau, kad tikrintum dėl „even-valued terms“ :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

"find the sum of the even-valued terms" - reikia ieškoti lyginių Fibonačio sekos skaičių sumos, o ne visų. Taip pat pas tave keistas for ciklas. Kam tau kintamasis "i", jei jo realiai nenaudoji, bet for cikle vistiek keli vienetu?

 

Red.: nespėjau parašyti, Silkė teisingai parašė pirmas.

Redagavo respo
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš antrą užduotį taip padaręs:

program Ep2;

function F(i:integer):longint;
begin
if i=1 then F := 1
else if i = 2 then F := 1
else F := F(i-1) + F(i-2);
end;

var suma:longint;
   i:integer;
Begin
i := 1;
suma := 0;
while F(i) < 4000000 do
   if F(i) mod 2 = 0 then
       begin
       suma += F(i);
       i += 1;
       end
       else i += 1;
writeln(suma);
readln;
end.

Bet esu pastebėjęs, kad šitas kodas greičiau veikia:

program Ep2;

var F:longint;
   F1, F2, F3:longint;
   i:longint;
   sum:longint;
begin
sum := 0;
F1 := 1;
F2 := 1;
i:= 0;
while F < 4000000 do
   begin
   i += 1;
   F := F1 + F2;
   F1 := F2;
   F2 := F;
   if F mod 2 = 0 then sum += F;
   end;
writeln(sum);
readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Čia dar galima sugudrauti skaičiuojant tik kas trečią sekos narį, jei F(1) = 0, nes http://upload.wikimedia.org/wikipedia/en/math/c/a/b/cabe91689f6a1af616ace02827c6e89c.png

 

Šiuo atveju tai spartos nepastebėtume, tačiau jei reiktų skaičiuoti iki daug didesnio nario, skirtumas būtų akivaizdus. Tai ypač pasimatys vėlesniuose uždaviniuose.

Redagavo respo
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš antrą užduotį taip padaręs:

program Ep2;

function F(i:integer):longint;
begin
if i=1 then F := 1
else if i = 2 then F := 1
else F := F(i-1) + F(i-2);
end;

var suma:longint;
   i:integer;
Begin
i := 1;
suma := 0;
while F(i) < 4000000 do
   if F(i) mod 2 = 0 then
       begin
       suma += F(i);
       i += 1;
       end
       else i += 1;
writeln(suma);
readln;
end.

Bet esu pastebėjęs, kad šitas kodas greičiau veikia:

...

 

Jau greiciau vien nuo to, kad tu priklausomai nuo skaiciaus, Fibonacio sekos suma skaiciuoji 1-2 papildomus nereikalingus kartus.

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