Здравейте, бихте ли ми помогнали с този код, влизам в infinite loop пък и не получавам верен отговор?
Условието:
Write a program that reads from the console a positive integer N and prints all the numbers from 1 to N not divisible by 3 or 7 , on a single line, separated by a space.
Input
- Will always consists of one valid integer number - the number N .
Output
-
Should always consists of the numbers from 1 to N , which are not divisible by 3 or 7 , separated by a whitespace.
let n = +gets();
let m = "";
let i = 1;
while (i < n){
if (i % 3 === 0 || i % 7 === 0) {
continue;
}
i++;
m += i + " ";
}
print(m, n);
1 Like
Здравей, Васко!
В случаите, когато знаем точно колко итерации, трябва да направим (от 1 до N) е по удачно да използваме for цикъл. По този начин, ще си спестиш декларирането на още една допълнителна променлива i, която е част от сигнатурата на самия for цикъл, а и няма да мислиш къде да инкрементираш i. В твоето решение, първоначално i = 1 и понеже е по-малко от N влизаш в тялото на цикъла, след което проверяваш дали i % 3 === 0 || i % 7 === 0, и понеже и двете проверки връщат false, не влизаш в тялото на проверката, инкрементираш i с едно и присвояваш стойност на m = '2 ', а би трябвало и 1 да запазим като неделимо на 3 и 7 число.
Когато i вече има стойност 3, цикъла ти става безкраен понеже на всяка следваща итерация влизаш в проверката и продължава изпълнението на програмата, просто i вече не се инкрементира никога.
Поздрави,
Иван!
Благодаря ви, ето го и с for loop и пак не ми се получи:
let n = +gets();
let m = "";
for (let i = 1; i < n; i++){
if (i % 3 === 0 || i % 7 === 0) {
continue;
}
m += i + " ";
}
print(m,n);
Мисля, че ако итерираш до i <= n и ако принтираш само m, без n, решението ти е правилно!
Поздрави,
Иван!
Да получи се благодаря ви!