@vtaeke

Как вернуть колчество чисел, которо потребуется по условию для достижения определенного значения?

Всем привет, запутался в последовательности действий в коде, можете подсказать по данной задаче, как все это дело реализовать.

Условие.
В небольшом городе население p0 = 1000 в начале года. Население постоянно растет на 2 процента каждый год и еще 50 новый людей каждый год переезжают в город жить. Сколько лет необходимо городу, чтобы его население стало больше или равно p >= 1200 жителей?
В конце первого года: 1000 + 1000 * 0.02 + 50 => 1070 жителей.
В конце второго года: 1070 + 1070 * 0.02 + 50 => 1141 жителей (** число жителей всегда целое **).
В конце третьего года: 1141 + 1141 * 0.02 + 50 => 1213.
Итого понадобится 3 года.
Немного об аргументах:
p0 -население в начале года, целое число больше 0
процент, положительное число или с плавающей запятой
aug - количество жителей, которые покидают или пребывают в город, целое число
p - население, которое требуется достичь, целое число больше 0
Функция nbYear должна возвращать количество лет, которое потребуется для достижения населения больше или равно p.

const nbYear = (p0, procent, aug, p) => {
  let count = 0;
  let res = 0;
  procent = procent / 100;
 
/*Напишу как я шел по этапно, а касательно цикла,  пока p0 <= p, 
мы прибавляем по p0++(допустим 50 жителей) при следующей итерации цикла.
Все же верно как я понимаю?*/ 
  for (p0 > 0;  p0 <= p; p0++) { 
//тут происходят мат.действия по условию.
    let res = ((p0 + p0) * procent) + aug;
//преобразуем результат в целое число
    res = Math.floor(res);
//если результат больше p0, значит мы прибавляем счетчик
    if (p0 < res) {
      count++;
    }
  }
  return count;
}

nbYear(1500, 5, 100, 5000) -> 15
nbYear(1500000, 2.5, 10000, 2000000) -> 10


Получаются 0, и вот тут уже затык, я понимаю, что где-то в условии походу есть косяк, но вот где и что пока не пойму.
  • Вопрос задан
  • 290 просмотров
Решения вопроса 1
@vtaeke Автор вопроса
Решил вот так.
const nbYear = (p0, procent, aug, p) => {
  let count = 0;
  let res = 0;
  procent = procent / 100;
  
  for (p0 > 0;  p0 <= p; p0++) {
    
    p0 = p0 + (p0 * procent) + aug;
    res = Math.floor(p0);
    count++;
    }
    return count;
  }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
дефолтноеКоличествоЖителей = 1000;
ожидаемоеКоличествоЖителей = 1200;
процентРостаНаселения = 0.02;
количествоПереездов = 50;
счётчикЛет = 0;

пока дефолтноеКоличествоЖителей < ожидаемоеКоличествоЖителей то
дефолтноеКоличествоЖителей = дефолтноеКоличествоЖителей * (1 + процентРостаНаселения);
дефолтноеКоличествоЖителей = дефолтноеКоличествоЖителей - количествоПереездов;
счётчикЛет = счётчикЛет + 1;
конецПока

вывод счётчикЛет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы