Помогите, Информатика, C/C++
Если цифры составляют часть системы символов, в них обычно заметен некий смысл, например, они являются математической прогрессией или определённой комбинацией, то есть каким-то образом связаны друг с другом. Дэн Браун, «Код да Винчи»
Зайдя в класс, Вова увидел на доске три числа, записанные в ряд. Он не заметил никакой взаимосвязи между ними, и ему сказали, что изначально чисел было четыре и разности между четвертым и третьим, третьим и вторым, вторым и первым равнялись друг другу. Иными словами, на доске была записана арифметическая прогрессия из четырех чисел. Однако затем одно из чисел с доски стерли.
Помогите Вове придумать и дописать на доску какое-нибудь число так, чтобы описанное условие снова начало выполняться.
Входные данные
Программа получает на вход три целых положительных числа, не превосходящих 105 каждое, по одному в строке, в том порядке, в котором они шли на доске.
Выходные данные
В первой строке выведите число, которое Вове необходимо написать. Можно доказать, что это число обязательно должно быть целым. В записи этого числа не должно быть десятичной точки, то есть вывод «13.0» вместо «13» является неправильным.
Во второй строке выведите целое число от 1 до 4 — место, на которое его необходимо написать. 1 означает, что указанное число необходимо выписать перед первым из трех приведенных во входных данных чисел, 2 — между первым и вторым, 3 — между вторым и третьим и 4 — после третьего числа.
Гарантируется, что входные данные таковы, что существует хотя бы один способ дополнить их до арифметической прогрессии. Если подходящих способов несколько, выведите любой из них.
Примечание:
В примере из условия Вова увидел на доске числа 10, 16 и 19. Если он напишет на доску между первым и вторым из них число 13, то в получившейся четверке чисел 10 13 16 19 разность между четвертым и третьим (19−16), третьим и вторым (16−13) и вторым и первым (13−10) окажется одна и та же, поэтому эта четверка будет арифметической прогрессией.
CC вы что фашист
Хорошо, давайте напишем программу на C++ для выполнения этой задачи.
C++
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
// Вычисляем возможные значения для вставки
int diff1 = (b - a) / 2; // Разность между a и b
int diff2 = (c - b) / 2; // Разность между b и c
// 1. Вставить перед первым числом
int first = a - diff1;
if (first > 0 && (first + a) % 2 == 0) {
cout << first << endl;
cout << 1 << endl;
return 0;
}
// 2. Вставить между первым и вторым
int second = (a + b) / 2;
if (second > 0 && (a + b) % 2 == 0) {
cout << second << endl;
cout << 2 << endl;
return 0;
}
// 3. Вставить между вторым и третьим
int third = (b + c) / 2;
if (third > 0 && (b + c) % 2 == 0) {
cout << third << endl;
cout << 3 << endl;
return 0;
}
// 4. Вставить после третьего числа
int fourth = c + diff2;
if (fourth > 0) {
cout << fourth << endl;
cout << 4 << endl;
return 0;
}
return 0;
}
Объяснение программы:
1. Программа считывает три целых положительных числа (a, b, c).
2. Вычисляются возможные значения для вставки в разные позиции.
3. Проверяется, является ли вставка корректной для каждой из четырех позиций (перед первым, между первым и вторым, между вторым и третьим, после третьего).
4. Как только обнаруживается работающая вставка, программа выводит результирующее число и его позицию.
Примечание: Гарантируется, что существует хотя бы один способ дополнить числа до арифметической прогрессии, поэтому программа обязательно найдет ответ.
Слава гипноденсу!
Еен