Задача
Задача из журнала «Квант» №6 1970 г. стр. 28 В.И.Арнольд
[latex]n[/latex] одинаковых монет лежат на столе, образую замкнутую цепочку. Сколько оборотов сделает монета [latex]M[/latex] такого же размера за то время, пока она один раз обкатится по внешней стороне всей цепочки, как показано на рисунке (монета [latex]M[/latex] =2 коп.)?Как изменится ответ, если монета [latex]M[/latex] будет иметь радиус, отличающийся в [latex]k[/latex] раз от радиуса каждой из монет в цепочке?
Представлю вам предложенное для данной задачи изображение из самого журнала.
Тесты
Входные данные | Выходные данные | ||
№ | [latex]n[/latex] | [latex]k[/latex] | Количество оборотов |
1 | 3 | 1 | 3 |
2 | 12 | 1 | 6 |
3 | 182 | 1 | 62.667 |
4 | 12 | 2.22 | 3.19998 |
5 | 145 | 2.28101 | 22 |
6 | 8 | 0.53884 | 8 |
Код.
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <cmath> using namespace std; int main(){ double n, k; cin >> n >> k; if (k==1) cout << ((n/3)+2); else cout << ((k+1)/(2*k))*(n-(2/M_PI)*n*acos(1/(k+1))+2); return 0; } |
Решение.
Примем радиус монет, составляющих цепочку, за единицу. За то время, пока монета радиуса [latex]k[/latex] прокатится по дуге [latex]\alpha[/latex] неподвижной окружности радиуса 1, она повернется на угол [latex]\alpha(1+1/k)[/latex] следовательно весь угол на который повернётся монета, равен [latex]\alpha+\alpha/k[/latex](в частности, при [latex]k[/latex]=1 этот угол равен 2[latex]\alpha[/latex]).
Теперь найдем сумму дуг,состоящих из таких точек неподвижных монет, которых монета [latex]M[/latex] касалась при качении по цепочке. Если принять центры монет цепочки за точки [latex]O_1[/latex], [latex]O_2[/latex], … , [latex]O_n[/latex], то сумма дуг, лежащих внутри многоугольника [latex]O_1[/latex][latex]O_2[/latex]…[latex]O_n[/latex], равна сумме его внутренних углов, то есть [latex]\pi(n-2)[/latex]. Сумма дуг, лежащих вне многоугольника, следовательно, равна [latex]\pi(n+2)[/latex].Из неё нужно вычесть ещё сумму дуг лежащих в углублениях между двумя соседними монетами, в которые [latex]M[/latex] не попадает. В каждом из [latex]n[/latex] углублений сумма двух таких дуг равна [latex]2\pi/3[/latex] при [latex]k[/latex]=1 и [latex]2arccos\frac{1}{k+1}[/latex] в общем случае. Итак, сумма дуг, по которым прокатится монета [latex]M[/latex], равна [latex]\pi(n+2)-2\pi n/3[/latex] (в общем случае [latex]\pi(n+2)-2n\arccos\frac{1}{k+1}[/latex]. Чтобы узнать искомое число оборотов, нужно умножить эту велечину на [latex]2[/latex]( в общем случае на [latex]1+1/k[/latex]) и разделить на 2[latex]\pi[/latex].
А значит ответ ([latex]\frac{n}{3}+2[/latex]) оборота при k=1, и [latex]\frac{k+1}{2k}(n-\frac{2}{\pi}n \arccos\frac{1}{k+1}+2)[/latex] оборота в общем случае.
Ссылка на решение:Ideone
— Не нужно так по-дизайнерски выделять слово «Задача» — это не название кинофильма.
— Почувствуйте разницу [latex]narccosx[/latex] и [latex]n\arccos x.[/latex]
— Сделайте, пожалуйста, правильные отступы в программе.
— Вы забыли указать метки (ключевые слова).
— Не следует делать видимым текст URL. Вряд ли пользователю интересно, что идентификатор программы именно mI2aOt.
— Арнольд не придумал название для этой задачи. Исправьте это досадное упущение великого одессита.
Спасибо за критику, выполнил все поручения, теперь должно быть првильно.
Почти все.
— Сделайте, пожалуйста, правильные отступы в программе.
Прошу прощения, допустил самую главную ошибку, спасибо что напомнили.
Очень хорошо. Молодец. Теперь поговорим не о таких важных вещах.
— Маленький новогодний квест — найдите не исправленный арккосинус.
— Никакой условный оператор в этой задаче не нужен. Прочтите внимательно решение.
— Я полагал, что основная сложность в этой задаче будет состоять в изготовлении многочисленных рисунков. Целых 6 штук. Три из них можно было изготовить просто сфотографировав монетки. Три оставшиеся являются чертежами и их нужно изготовить в формате SVG. Вы сильно сократили текст пояснения и убрали рисунки. Давайте я сделаю для Вас заготовки фотографий с монетами (чтобы не вмешивать деньги в учебный процесс), а дальше Вы уже как-то сами: