Задача про начальника транспортного цеха
vk f t

Задача про начальника транспортного цеха

Что быст­рее — вспом­нить фор­му­лы за 7 класс или напи­сать про­грам­му для реше­ния?

Задача тайм!

Началь­ник транс­порт­но­го цеха при­гла­сил несколь­ко чело­век на сове­ща­ние. Каж­дый, кто вхо­дил в каби­нет, пожи­мал руки всем осталь­ным. Сколь­ко чело­век участ­во­ва­ло в сове­ща­нии, если все­го полу­чи­лось 120 руко­по­жа­тий?

Эту зада­чу мож­но решить дву­мя спо­со­ба­ми: как мате­ма­тик или как про­грам­мист.

Реше­ние мате­ма­ти­ка

Мате­ма­ти­ки любят кра­си­вые чис­ло­вые после­до­ва­тель­но­сти, кото­рые под­чи­ня­ют­ся стро­гим фор­му­лам. Мы тоже попро­бу­ем полу­чить такую после­до­ва­тель­ность и посмот­рим, есть ли для неё какая-то гото­вая фор­му­ла.

В самом нача­ле у нас есть один чело­век — сам началь­ник транс­порт­но­го цеха. Он руки нико­му не жмёт, поэто­му для одно­го чело­ве­ка коли­че­ство руко­по­жа­тий рав­но 0.

Когда при­хо­дит вто­рой, он жмёт руку толь­ко началь­ни­ку, пото­му что боль­ше нико­го пока нет. Зна­чит, для двух чело­век коли­че­ство руко­по­жа­тий рав­но 1.

Тре­тий пожмёт руки им обо­им, сде­лав 2 руко­по­жа­тия, а общее коли­че­ство руко­по­жа­тий ста­нет рав­ным 1 + 2 = 3.

Чет­вёр­тый пожмёт руки трём при­сут­ству­ю­щим, сде­лав три руко­по­жа­тия, и общее чис­ло руко­по­жа­тий полу­чит­ся 3 + 3 = 6.

Нако­нец, пятый пожмёт руки 4 раза и уве­ли­чит общее чис­ло до 6 + 4 = 10.

Запи­шем эту после­до­ва­тель­ность:

0, 1, 3, 6, 10.

Гля­дя на это, каж­дый мате­ма­тик вос­клик­нет: «Да это же тре­уголь­ные чис­ла!»

Треугольные числа

Тре­уголь­ные чис­ла — это чис­ло точек, кото­рые мож­но рас­ста­вить в фор­ме пра­виль­но­го тре­уголь­ни­ка, поэто­му их так и назы­ва­ют. Для них есть спе­ци­аль­ная фор­му­ла, выве­сти кото­рую на стра­ни­цы это­го жур­на­ла мы не можем по тех­ни­че­ским при­чи­нам.

Нам надо из само­го чис­ла най­ти его номер, что­бы понять, какой по счё­ту чело­век при­шёл и дал в сум­ме 120 руко­по­жа­тий. Не вда­ва­ясь в мате­ма­ти­че­ские подроб­но­сти, сра­зу ска­жем, что фор­му­ла тре­уголь­ных чисел может быть све­де­на к вот тако­му квад­рат­но­му урав­не­нию:

n² + n - 2T = 0.

Мы зна­ем, что у нас по усло­вию Т = 120. Под­ста­вим это чис­ло в урав­не­ние:

n² + n - 2 × 120 = 0 → n² + n - 240 = 0.

При­ме­ним зна­ния из 7 клас­са школь­ной про­грам­мы по мате­ма­ти­ке и решим его:

n1 = -16 и n2 = 15.

Так как коли­че­ство чело­век на встре­че не может быть отри­ца­тель­ным, то вари­ант -16 нам не под­хо­дит. Оста­ёт­ся 15, но так как наша после­до­ва­тель­ность сдви­ну­та на еди­ни­цу (пото­му что пер­вый чело­век не пожи­ма­ет руки нико­му, а отсчёт начи­на­ет­ся со вто­ро­го при­шед­ше­го), то мы при­бав­ля­ем к 15 еди­ни­цу и полу­ча­ем 16 — это и будет пра­виль­ный ответ.

Реше­ние про­грам­ми­ста

Пред­ставь­те, что вы не зна­е­те про тре­уголь­ные чис­ла, но уме­е­те про­грам­ми­ро­вать и орга­ни­зо­вы­вать цик­лы. Это­го вполне доста­точ­но для того, что­бы решить эту зада­чу.

Общее пра­ви­ло такое: каж­дый, кто при­хо­дит, дела­ет на одно руко­по­жа­тие мень­ше, чем его соб­ствен­ный поряд­ко­вый номер. Полу­чит­ся, что пер­вый пожмёт руки 0 раз (1 - 1 = 0), вто­рой — 1 раз (2 - 1 = 1) и так далее. И с каж­дым вхо­дя­щим мы будем эти руко­по­жа­тия скла­ды­вать с осталь­ны­ми. Оста­лось напи­сать про­грам­му. Как все­гда в этих слу­ча­ях, про­ще все­го исполь­зо­вать JavaScript. Код, кото­рый будет ниже, мож­но вста­вить в кон­соль пря­мо на этой стра­ни­це (Cmd + Alt + I) и полу­чить нуж­ный резуль­тат:

    
language: JavaScript
// переменные для подсчёта людей и общего количества рукопожатий

var count, handshake;

// в самом начале был один начальник транспортного цеха…

count = 1;

// ...который руку никому не пожал

handshake = 0;

// пока количество рукопожатий не станет равно 120 — выполняем цикл

while (handshake != 120) {

//добавляем нового участника совещания

   count +=1;

   // считаем, сколько раз он пожмёт руки всем, кто уже присутствует

   handshake +=(count-1);

 }

// выводим итоговое количество присутствующих

alert('Всего пришло ' + count + ' человек.')


Ско­пи­ро­вать код
Код ско­пи­ро­ван

В ито­ге за нас всю рабо­ту сде­ла­ла про­грам­ма, и ни одной фор­му­лы не задей­ство­ва­но.

Ино­гда мож­но решить зада­чу про­стым пере­бо­ром, воз­ло­жив всю меха­ни­че­скую рабо­ту на маши­ну.

Ещё по теме