Доброго дня!
Очень прошу объяснения от умных и находчивых "олимпиадников" по задаче с прошедшей олимпиады.
Условия задачи:
Артем создает интерактивный сенсор для игры в кости. Сенсор встроен в стол и может считать
суммарное число точек на гранях всех брошенных костей, прилегающих к сенсору (то есть, на
нижних гранях). Позже Артем понял, что для игры нужно считать сумму не на нижних, а на
верхних гранях. Артем хочет написать программу, которая по сумме на нижних гранях сможет
находить количество различных возможных сумм на верхних гранях. Но так как Артем не силен в
программировании, он поручает эту задачу вам.
Сенсор выдает число s равное суммарному числу точек на нижних гранях игральных костей.
Все бросаемые кости шестигранные и удовлетворяют условию правильной игральной кости, то есть
сумма точек на противоположных гранях кубика равна семи (1 и 6, 2 и 5, 3 и 4). Вам необходимо
найти количество возможных сумм на верхних гранях кубиков.
Формат входных данных:
В первой строке входного файла задано число s сумма на нижних гранях костей.
Формат выходных данных:
Выведите одно число: количество различных всевозможных сумм на верхних гранях косте
Примеры:
Input: 2 | Output: 2
Input: 4 | Output: 4
Решение на C++:
#include <fstream>
using namespace std;
int main() {
ifstream fin("sensor.in");
ofstream fout("sensor.out");
int s, ans;
fin >> s;
ans = s - (s + 5) / 6 + 1; // (1)
fout << ans << endl;
}
Код - версия решения от жюри.
Суть вопроса сводится к объяснению формулы (1). Буду благодарен за любое объяснение и в особенности за доходчивое.