[ Darko014 @ 07.09.2010. 20:00 ] @
Moze li neko ko zna JavaScript da mi resi par zadataka.Pokusavao sam i dan i noc i nema sanse(nisam nikad ranije radio u JS-u).

1.Pomocu JavaScripta prikzati sve brojeve izmedju 1 i 100 ciji je zbir cifara jednak 8.

2.Pomocu JavaScripta prikzati sve brojeve izmedju 100 i 200 koji su deljivi sa 3 a nisu sa 4.

Pomoc,molim vas.
[ Aleksandar Ružičić @ 08.09.2010. 02:16 ] @
1.
Code (javascript):

function getDigitsSum(number) {
  var sum = 0;

  while (number > 0) {

    sum += number % 10;
    number = Math.floor(number / 10);
  }

  return sum;
}

function findNumbers() {

   var results = [];

   for (var i = 1; i <= 100; i++) {
      if (getDigitsSum(i) == 8) {
        results.push(i);
      }
   }

   return results;
}
 


2.
Code (javascript):

function findNumbers() {

   var results = [];

   for (var i = 100; i <= 200; i++) {
     if (i % 3 == 0 && i % 4 != 0) {
       results.push(i);
     }
   }

   return results;
}
 
[ Darko014 @ 09.09.2010. 15:29 ] @
Hvala na pomoci.
[ japaja78 @ 06.03.2012. 19:55 ] @
evo jos jednog resenja, ukoliko ti treba da se proveri i da li je dobijeni zbir cifara dvocifren broj, pa da li je njihov zbir=8 (89, 98)

//Pomocu JavaScripta prikzati sve brojeve izmedju 1 i 100 ciji je zbir cifara jednak 8.
var skup=[8];

for(var i=10;i<101;i++){
var a=Math.floor(i/10);
var b=i-a*10;
if (a+b===8) skup.push(i);
if (a+b>16) {
var a1=Math.floor((a+b)/10);
var b1=a+b-a1*10;
if (a1+b1===8) skup.push(i);
}
}

console.log(skup);

[ JohnnyDedi @ 01.07.2022. 13:21 ] @
Evo najjednostavnijeg resenja ...

for (let i = 0; i < 20; i++) {
for (let j = 0; j < i; j++) {
if (i + j == 8) {
document.write(i + " i " + j);
document.write("<br>");
}
}
}
[ Bradzorf012 @ 01.07.2022. 22:01 ] @
Ni jedno od ponuđenih rešenja nije algoritamski efikasno. Ako su uslovi jednostavni kao u navedenim zadacima, a opseg mali, stvar lako radi. Ako imaš milion iteracija(slogova, redova) i složenije uslove ovo ne valja uopšte.

1. Najmanji takav broj je 8. Svaki sledeći je za devet veći, a najveći je 80.

2. Najmanji trocifreni broj deljiv sa 3 koji nije deljiv sa 4 je 102. Svaki sledeći je za 12 veći od prethodnog, a najveći je 198.
[ mjanjic @ 30.07.2022. 18:13 ] @
Nešto si pogrešio pod 2., kako je svaki sledeći za 12 veći, ako na 102 možeš da dodaš 3 i dobiješ 105, koji nije deljiv sa 4, 108 ne može, ali može 111, itd.
U stvari, pošto broj mora da bude deljiv sa 3, ali ne i sa 4, može da se predstavi kao n*12 + 3, n*12+6, n*12+9, pa se potom inkrementira n.
Nadam se da nisam i ja nešto prevideo, pošto sam ceo dan nešto dremljiv :)
[ Milan Milosevic @ 03.08.2022. 12:10 ] @
1.
Code:

function ZbirCigara(odbr,dobr,zbir) {
     rez =[];
     for (i=odbr;i<=dobr;i++){
       let str = i.toString();
       if(str.split("").reduce((a,b)=>Number(a)+Number(b))==zbir) rez.push(i);
      }
     return rez;
    }

2.
Code:

    function Deljivi3ne4(odbr,dobr) {
        rez =[];
        for (i=odbr;i<=dobr;i++){
          let br1 = i%3;
          let br2 = i%4;
          if(br1===0 && br2!==0) rez.push(i);
         }
        return rez;
       }
[ Bradzorf012 @ 03.08.2022. 16:18 ] @
Citat:
mjanjic:
Nešto si pogrešio pod 2...


Izgleda da jesam, eto novog malog izazova.

P.S. Kako koristite [code] tagove da obojite kod?
[ Panta_ @ 03.08.2022. 19:00 ] @
Citat:
Kako koristite [code] tagove da obojite kod?


Sa [code:javascript] za JavaScript.
[ Bradzorf012 @ 03.08.2022. 20:52 ] @
Hvala lepo.
[ mjanjic @ 09.08.2022. 13:44 ] @
Citat:
Milan Milosevic:
2.
Code (javascript):

    function Deljivi3ne4(odbr,dobr) {
        rez =[];
        for (i=odbr;i<=dobr;i++){
          let br1 = i%3;
          let br2 = i%4;
          if(br1===0 && br2!==0) rez.push(i);
         }
        return rez;
       }
 

Već smo pominjali, radi, ali neefikasno, jer proverava za svaki broj, a nema potrebe za tim. Slično kao kad proveravaš da li je broj prost pa tražiš delioce od 2 do korena iz tog broja, a u stvari može efikasnije (umesto da se ide po "n", ide se po "6n", možeš da nađeš na internetu primer).

Nije problem kad su manji brojevi, ali ako su ogromni...
[ Milan Milosevic @ 09.08.2022. 20:49 ] @
Citat:
mjanjic: Već smo pominjali, radi, ali neefikasno, jer proverava za svaki broj, a nema potrebe za tim. Slično kao kad proveravaš da li je broj prost pa tražiš delioce od 2 do korena iz tog broja, a u stvari može efikasnije (umesto da se ide po "n", ide se po "6n", možeš da nađeš na internetu primer).

Nije problem kad su manji brojevi, ali ako su ogromni...

Hvala mjanjic.
Sigurno postoje neka pravila kad je broj deljiv sa 3 i sa 4. Radi se to u osnovnoj školi ali nisam razmišljao o tome. Gledao sam brzo rešenje.

Ovo je po meni optimalno rešenje. Ne vidim da može da se uradi nešto brže.
Code:

function Deljivi3ne4(odbr,dobr) {
   rez =[];
   for (i=odbr+3-odbr%3;i<=dobr;i+=3){
     if( i%4!==0) rez.push(i);
    }
   return rez;
  }



[Ovu poruku je menjao Milan Milosevic dana 09.08.2022. u 22:12 GMT+1]
[ mjanjic @ 12.08.2022. 13:53 ] @
Pa, realno, za deljivost brojem 3 verovatno bi bilo najbrže da se saberu cifre (neki jezici imaju veoma efikasne načine da se to odradi), sigurno je daleko brže za velike brojeve nego da se proverava deljivost, mada, eto, moglo bi da se testira :)

Ali, za deljivost brojem 2 moralo bi da se testira da li je deljiv sa 4, mada kod nekih jezika postoji trik - deljenje sa 2 je u stvari pomeranje cifara za jedno mesto u desno u binarnom brojnom sistemu, što je moguće samo ako je poslednja cifra NULA - dakle, za deljivost sa 4 bilo bi dovoljno proveriti da li su poslednja 2 bita NULA :)))
Ako je to "malo" teže izvesti u nekim modernim jezicima (u C-u je podržano, i često se koristi kod množenja sa 2, samo se bitovi "pomere" u levo za jedno mesto), dovoljno je u principu proveriti u dekadnom brojnom sistemu samo deljivost broja koga čine poslednje 2 cifre, jer 100, 1000, itd. su deljivi sa 4.