Метод check сначала проверяет, является ли число средним из трех. Если да, выводит его. Дальше он проверяет, является ли число равным одному из трех. Если да, выводит. Если нет, идет сдвиг введенных чисел, и цикл проверок повторяется уже с другим числом. Возможно проблема в следующем: в том случае, если есть одинаковые числа, алгоритм выбирает не "любое" из них, а первое попавшееся? В условии не уточняется это