Правильный алгоритм
Всем привет! У меня есть следующая задача: Дано prompt в котором задается вопрос таблицы умножения. Например: What is 5 * 8? (Тут числа задаются случайно через Math.random()). В ответ вводится числа от 1 до 81. Например я ввожу 25. И когда пользователь нажимает на "Отмена" результат падает в такой массив: array = [[5, 8], 25]. То есть array[0][0] = 5; array = [0][1] = 8; array[1] = 25;
Перейду к вопросу: Что я хочу получить в ответ? Допустим вышли вот такие вопросы:
- 5 * 8?
- 8 * 4?
- 4 * 3?
- 1 * 2?
То есть здесь можно понять, что 8 и 4 встречается 2 раза, а остальные цифры 5, 3, 1, 2 встречаются по одному разу.
И если для данных вопросов отвечу неправильно, то мне надо в консольку вывести такое сообщение:
В таблице на 5 - 1 ошибка!
В таблице на 8 - 2 ошибки!
В таблице на 4 - 2 ошибки!
В таблице на 5 - 1 ошибка!
В таблице на 3 - 1 ошибка!
В таблице на 1 - 1 ошибка!
В таблице на 2 - 1 ошибка!
Моя реализация выглядит так:
for (let i = 0; i < array.length; i+=2) {
if ((parseInt(array[i][0]) * parseInt(array[i][1])) !== parseInt(array[i + 1])) {
for (let j = 1; j < 9; j++) {
if (parseInt(array[i][0]) === j) k++;
if (parseInt(array[i][1]) === j) l++;
}
}
if (k !== 0 && l !== 0) {
console.log('В таблице на ' + array[i][0] + ' - ' + k + choiceErrorText(k));
console.log('В таблице на ' + array[i][1] + ' - ' + l + choiceErrorText(l));
}
}
function choiceErrorText(number) {
if (number === 1) {
return ' ошибка!';
} else if (number >= 2 && number <= 4) {
return ' ошибки!';
} else if (number > 4) {
return ' ошибок!';
}
}
Мой код выдает что-то такое:
В таблице на 5 - 1 ошибка!
В таблице на 8 - 1 ошибка!
В таблице на 8 - 2 ошибки!
В таблице на 4 - 2 ошибки!
В таблице на 4 - 3 ошибки!
В таблице на 3 - 3 ошибки!
Ответы (1 шт):
Не выводите ничего в цикле, в котором вычисляется количество ошибок, а запоминайте результаты вычислений. А потом выводите их отдельным циклом.