Умова задачі
Маргарита любить свої дні народження. Вона дійсно щаслива, коли задуває свічки під мелодію «Happy Birthday». Кожного року, починаючи з досягнення нею чотирьохрічного віку, вона складає свої свічки з дня народження (по одній за кожен рік віку) в коробку для свічок. Її молодший брат Тео почав робити те ж саме у віці трьох років. Коробки Маргарити і Тео та свічки в них виглядають однаково.
Одного разу Маргарита вирішила порахувати, скільки свічок в неї у коробці:
- Ні, ні, ні! Я молодша цього!
Вона щойно зрозуміла, що Тео кинув в її коробку декілька свічок з його днів народжень. Чи можете ви допомогти Маргариті виправити кількість свічок в її коробці?
Маючи різницю у віці між Маргаритою і Тео, кількість свічок в коробці Маргарити та число свічок в коробці Тео, визначте, скільки свічок Маргариті потрібно вийняти з її коробки, щоб в ній була потрібна кількість.
Вхідні дані
Перший рядок — число [latex] d (1 ⩽ d ⩽ 20) [/latex] — різниця у віці між Маргаритою і Тео.
Другий рядок — число [latex]m (4 ⩽ m < 1000)[/latex] — кількість свічок в коробці Маргарити.
Третій рядок — число [latex]t (0 ⩽ t < 1000)[/latex] — кількість свічок в коробці Тео.
Вихідні дані
Виведіть число свічок, яке Маргариті потрібно вийняти з її коробки, щоб в ній була правильна кількість.
Тести
№ | ВХІДНІ ДАНІ | ВИХІДНІ ДАНІ |
---|---|---|
1 | 2 26 8 |
4 |
2 | 4 48 3 |
9 |
3 | 7 110 14 |
11 |
4 | 10 568 78 |
139 |
5 | 13 800 37 |
211 |
Код програми
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cmath> using namespace std; int main() { int d, m, t; int x, discriminator, sum, superfluous; cin >> d >> m >> t; sum = m + t; //рахуємо кількість свічок у двох коробках pow (x, 2) + (1 - d) * x + (pow (d, 2) - d - 18 - 2 * sum) / 2; discriminator = pow (1 - d, 2) - 2 * (pow (d, 2) - d - 18 - 2 * sum); x = ( (d - 1) + sqrt (discriminator) ) / 2; //вік Маргарити в момент перевірки вмісту коробки superfluous = m - ( (4 + x) * (x - 3) ) / 2; //зайва кількість свічок в коробці Маргарити cout << superfluous; //виводимо відповідь return 0; } |
Розв’язання
Нехай [latex] x [/latex] — кількість років Маргарити в момент перевірки вмісту коробки зі свічками, тоді [latex] x — d [/latex] — вік Тео в цей момент. Правильна кількість свічок в коробці Маргарити — [latex] \frac{(4+x)(x-3)}{2} [/latex] та коробці Тео [latex] \frac{(3+x-d)(x-d-2)}{2} [/latex] (як суми членів арифметичної прогресії). Правильна кількість свічок в обох коробках дорівнюватиме сумі свічок, що наявна в коробці Маргарити і Тео, відповідно [latex] m + t [/latex]. Складемо рівняння, яке після ряду перетворень набуде квадратного виду [latex] ax^2+bx+c=0 [/latex] — [latex]x^2 + (1 — d) x + \frac{d^ 2 — d — 18 — 2 (m + t)}{2} = 0[/latex]. Знайдемо дискримінант [latex] b^2-4ac [/latex], а потім корінь рівняння за формулою [latex] \frac{-b+\sqrt{D}}{2a}[/latex], тому [latex]x = \frac{(d-1) + \sqrt{D}}{2}[/latex], причому [latex]\frac{-b — \sqrt{D}}{2a} [/latex] — не є потрібним розв’язком, адже набуватиме від’ємного значення. Тепер віднімемо від свічок, які Маргарита знайшла в коробці їx правильну кількість. Отже, зайвими будуть [latex]m — \frac{(4+x)(x — 3)}{2}[/latex] свічок.
Посилання
Задача на сайті e-olymp
Код розв’язання на ideone
Роботу зараховую, але Вам доведеться виправити недоліки перед тим як я дам наступне завдання.
— Функція pow(x, y) призначена для випадів на кшталт такого $2.17^{1.23}$. Робить вона це через розклад у ряд елементи якого отримуються через піднесення до цілого степеня. Вам потрібно отримати квадрат числа? Дійте за означенням — множте число на себе, ось і уся робота.
— В коді у Вас є таке:
Цей рядок є superfluous, бо те що він обчислює нікуди не йде. Виходячи з опису він теж зайвий.
— В опису ви використовуєте традиційне позначення $D$. Краще залишити саме його у коді — D. Погодьтесь, немає жодного сенсу використовувати дві різні назви.
Так, мені ці три моменти теж здалися кращими, бо таким і був першим варіант. Виправлю як було спочатку.