У меня проблема с математической задачей цикла - PullRequest
0 голосов
/ 21 сентября 2019

Мне поставили математическую задачу, которую нужно решить с помощью цикла while.Я пробовал слишком много способов ее решить, но, к сожалению, они, похоже, не работают.

Вот сама математическая задача:

Групповой этап кубка мира вот-вотконец и Пепи хочет знать, будет ли его любимая команда квалифицироваться.Известно, что применяются следующие правила: если команда забила в матче больше голов, чем получила, то она выигрывает и получает 3 очка;если количество забитых и полученных голов равно, команда получает 1 очко;в случае проигрыша количество очков не меняется.Команда в итоге оценивается, если общее количество голов, забитых во всех сыгранных матчах, больше или равно количеству полученных голов.Напишите программу, которая вычисляет, соответствует ли команда требованиям.

С консоли считываются две строки:

  • Название команды - текст;
  • Сыграно совпадений - целое числоположительный в интервале [1… 10];

Для каждой сыгранной игры есть две новые строки:

  • Забитые голы - положительное целое число в интервале [1… 10000];
  • Полученные цели - целое положительное число в интервале [1… 10000];

На консоли выводятся две строки:

  • Есликоманда квалифицируется:
    "{название команды} завершило групповой этап с {очками} очками."
    "Разница голов: {разница мячей}."
  • Если команда не прошла квалификацию:
    "{название команды} было исключено из группового этапа."
    "Разница голов: {разница мячей}."

function solve(input) {

  let name = input.shift();
  let matches_played = Number(input.shift());
  let matches = 0;
  let points_winner = 0;
  let points_loser = 0;
  let goalDifference = 0;
  let total = 0;

  while (matches <= matches_played) {
    let first_team = Number(input.shift());
    let second_team = Number(input.shift());

    if (first_team > second_team) {
      points_winner = points_winner + 3;
    } else if (first_team === second_team) {
      points_winner = points_winner + 1;
    } else if (first_team < second_team) {
      points_winner = points_winner + 0;
    }

    goalDifference = first_team - second_team;
    total = total + goalDifference;

    matches++;
  }

  if (points_winner >= points_loser) {
    console.log(`${name} has finished the group phase with ${points_winner} points.`)
  } else {
    console.log(`${name} has been eliminated from the group phase.`)
    console.log(`Goal difference: ${goalDifference}`)
  }
}

solve(['Brazil', 3, 4, 2, 0, 0, 1, 1])

При отображаемом входе ожидаемый результат:

Brazil has finished the group phase with 5 points.
Goal difference: 2.

1 Ответ

0 голосов
/ 21 сентября 2019

Оператор if в конце должен основываться на total, а не points_winner.Если total равно, по крайней мере, 0, команда квалифицирована.

Если сумма меньше 0, конвертируйте ее в положительное число, когда показывает сумму, на которую она сократилась.

При показе разницы мячей в конце необходимо использовать total.goalDifference содержит только разницу от последнего совпадения.

Условие while должно быть matches < matches_played.Если вы используете <=, он зацикливается на дополнительном времени и получает undefined для тех недостающих элементов массива, что заставляет вас получить NaN, когда вы добавляете их в total.

function solve(input) {

  let name = input.shift();
  let matches_played = Number(input.shift());
  let matches = 0;
  let points_winner = 0;
  let goalDifference = 0;
  let total = 0;

  while (matches < matches_played) {
    let first_team = Number(input.shift());
    let second_team = Number(input.shift());

    if (first_team > second_team) {
      points_winner = points_winner + 3;
    } else if (first_team === second_team) {
      points_winner = points_winner + 1;
    } else if (first_team < second_team) {
      points_winner = points_winner + 0;
    }

    goalDifference = first_team - second_team;
    total = total + goalDifference;

    matches++;
  }

  if (total >= 0) {
    console.log(`${name} has finished the group phase with ${points_winner} points.`)
    console.log(`Goal difference: ${total}`)
  } else {
    console.log(`${name} has been eliminated from the group phase.`)
    console.log(`Goal difference: ${-total}`)
  }
}

solve(['Brazil', 3, 4, 2, 0, 0, 1, 1])
solve(['Spain', 3, 2, 4, 1, 2, 3, 3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...