Loading...
MartinBG avatar MartinBG 4803 Точки

Не е точно критика, но ще се опитам да дам някои насоки и да посоча възможни проблеми с решението.

 

Променливите трябва да се дефинират там, където са необходими, а не в началото на кода. Това се прави за да се минимизират възможностите за грешки и да се улесни четенето на кода.

  let sum = 0;

  for (let i = 1; i <= number; i++) {
    sum = i % 10 + parseInt(i / 10);
  }



// По-правилно е да се запише така:

  for (let i = 1; i <= number; i++) {
    let sum = i % 10 + parseInt(i / 10);
  }

 

Въпреки, че JS позволява смяната на типа на променливите, това е лоша практика и тябва да се избягва:

  let answer = ''; // answer е от тип String

  // ...

    answer =
      sum === 5 ||
      sum === 7 ||
      sum === 11;
  // answer вече е от тип Boolean


///////////////// Правилно е да се запише така

let answer = True; // Boolean type
//....
answer = sum === 5 || sum === 7 || sum === 11; // Boolean type

 

Решението няма да работи коректно за числа с повече от 2 цифри.

Например за 104 ще изведе False, вместо True ( 1+0+4 = 5, т.е. специално число).

 

Примерно решение:

function solve(number) {
  for (let i = 1; i <= number; i++) {
    let currentNum = i; // копираме стойността на i в нова променлива, защото ще трябва да я променяме
    let sumOfDigits= 0;
    while (currentNum > 0) { // въртим този цикъл докато не стигнем 0, т.е. обходили сме всички цифри на числото
      sumOfDigits += currentNum % 10; // към sumOfDigits добавяме стойността на последната цифра, напр. от 345 ще вземем 5
      currentNum = Math.trunc(currentNum / 10); // премахваме последната цифра от числото, напр. 345 ще стане 34
    }

    const isSpecialNumber = sumOfDigits === 5 || sumOfDigits === 7 || sumOfDigits === 11;
    // използваме const, защото isSpecialNumber няма да бъде променяно
    console.log(isSpecialNumber ? `${i} -> True` : `${i} -> False`);
  }
}

 

1
engenginy avatar engenginy 4 Точки

Може ли коментари и за следния код. Тази практика добра ли е за Javascript или подходът е грешен, въпреки че кодът дава 100/100 в judge.

function solve(num){
    for (let i = 1; i <= num; i++){
        let sum = 0;
        for (let j = 0; j < String(i).length; j++){
            sum += Number(String(i)[j]);
        }
        if (sum === 5 || sum === 7 || sum === 11){
            console.log(`${i} -> True`);
        }else {
            console.log(`${i} -> False`);
        }
    }
}

 

0
MartinBG avatar MartinBG 4803 Точки

@engenginy

Подходът не е грешен, но използването на String за да достъпим отделните цифри не е оптимално. Компютрите са изчилителни машини, оптимизирани за работа с числа. Използването на абстракции е възможно и необходимо за решаване на по-сложни проблеми, но почти винаги идва с цена откъм производителност.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.