Задача "Добри числа"

javascript

#1

Здравейте,

може ли малко помощ с тази задача. Както и да го въртя все не ми излиза…

Код вариант 1.

Код вариант 2.


#2

За тази задачка ли, иде реч?


#3

Не, тази е Добри числа.


#4

Искаш ли да разкажеш с думички алгоритъмът , който се опитваш да направиш и да го обсъдим?


#5

Ами в задачата се търсят всички числа в даден диапазон, които се делят на всяка една от цифрите си като изключим 0.
В първият вариант на кода взимам двете числа, които са дадени за Input и правя Array. Всяко число от Array-а го разделям на цифрите му, махам 0-та (ако има такава) и с модул разделям числото на останалите цифри от него. Ако има остатък значи не е “добро”, ако остатъкът и при двете деления е 0 числото е “добро” и го добавям в Array с резултат, които принтирам накрая. Понеже се получаваха дубликати ги махам.
Наясно съм, че това няма да сработи с по-големите числа, но дори и с малките не излиза верен резултат при тест 42-142 или 1-10.

Във вторият вариант с 2 функции подобни на Editorial-а на Java пак не ми се получава…


#6

Трябва да намериш , колко са числата , не кои конкретно са. Тук алгоритъмът гърми, дори словестният ;). Вместо да ги пазиш в масив, защо не пробваш да ги обработваш интайм/веднага и една променлива за брояч и бум. Как може да имаш дублиращи в поредицата примерно: 1 2 3 4 5 6 7 8 9 10 ??? или 42 43 44 … 78


#7

Като се преброят числата в Array-а става ясно колко са, но не са верният брой. На вторият вариант го правя просто с counter, който се увеличава при всяко “добро” число и пак не са правилният брой. Ако може да споделиш правилно решение на JS може да си намеря грешката.


#8

Може , да опитаме да преправим вариант 1 или пък 2?


#9

Ами вариант 2, като че ли ще стане по-лесно и за големите числа.


#10

Ще го обмисля и при успех ще ти споделя.


#11

Като цяло имаш няколко грешки във вариант 2.

  • При деленето temp /= 10; получаваш дробни числа.
  • Ако цифрата е 0 не трябва да връщаш false, че не е добро число, а да прескочиш тази проверка.

Мога да ти пусна решение ако искаш.
Все пак, за да пробваш сам като насока, по-добре смени този while с един for, който върти по цифрите на сегашното число и прескачай ако е 0.