@kr_ilya

Определить победителя КНБ?

Пусть для игры в камень ножницы бумага есть следующие обозначения
1- камень
2 - ножницы
3 - бумага
Нужно определить победителя, по паре чисел, напр. (1, 3) - проигрыш, а (1, 2) - победа.

В статье есть способ через остаток от деления. Но я не совсем понял, почему там получаются именно такие результаты.
Вот выдержка из статьи:


0 — колодец(камень)
1 — ножницы
2 — бумага

Имеем последовательность пар чисел: (0, 1) (0, 2) (2, 2) (2, 0)..., где первое число показал бот, второе — человек. Чтобы определить победителя в паре, сравним числа. (0 — 1) % 3 = 2, значит человек проиграл, (0 — 2) % 3 = 1, значит человек победил, (2 — 2) % 3 = 0, ничья.


Как так получается, что (0 — 1) % 3 = 2, если даже взять значение в скобках по модулю, то 1 % 3 = 1, никак не 2.
Или знак % здесь не является получением остатка от деления?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
(-1) % 3 = 2

Это математическое определение вычетов по модулю. Все числа, которые отличаются на n, имеют одинаковый остаток по модулю n. Конфуз происходит из-за того, что операция взятия по модулю во многих языках программирования работает не так. Для отрицательных чисел она выдаст отрицательное значение, правда к которому можно прибавить n, что бы получить правильный модуль - число от 0 до n-1.

Поэтому при реализации можно делать (a-b+3)%3 Или преобразовать, чтобы не было вычитания: b == (a+1)%3
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ModuleWorks Симферополь
от 600 до 2 000 €
RefleXion Medical Санкт-Петербург
от 160 000 до 220 000 ₽
PrimatLab LLC Таганрог
от 90 000 до 120 000 ₽
30 нояб. 2021, в 21:14
5000 руб./за проект
30 нояб. 2021, в 20:09
20000 руб./за проект
30 нояб. 2021, в 19:40
4000 руб./за проект