Форум умных людей

Задачи и головоломки => Логические задачи и головоломки => Тема начата: fortpost от Февраль 29, 2012, 23:34:33



Название: Везучая теща
Отправлено: fortpost от Февраль 29, 2012, 23:34:33
В розыгрыше главного приза телевизионной лотереи участвовало 300 человек. Они выстроились по кругу, затем, начиная с кого-то, получившего номер 1, их стали пересчитывать. При этом каждый третий всякий раз выбывал. (Так, на первом круге выбыли все с номерами, кратными 3.) Счет продолжался до тех пор, пока не остался один человек. Этот человек и получил главный приз. (Им случайно оказалась теща телережиссера.) Какой номер в первоначальной расстановке имел победитель?


Название: Re: Везучая теща
Отправлено: moonlight от Март 01, 2012, 00:24:11
Показать скрытый текст ?


Название: Re: Везучая теща
Отправлено: монЯрхъ от Март 01, 2012, 08:50:27
Хау? Хау вы это посчитали? Решение!  :girlcry:


Название: Re: Везучая теща
Отправлено: семеныч от Март 01, 2012, 15:00:53
решение бы

 :beer:


Название: Re: Везучая теща
Отправлено: ☭-Изделие 20Д от Март 01, 2012, 18:19:43
Показать скрытый текст


Название: Re: Везучая теща
Отправлено: fortpost от Март 01, 2012, 20:31:25
И у меня 191. Считал с помощью сей программы.
Показать скрытый текст


Название: Re: Везучая теща
Отправлено: fortpost от Март 02, 2012, 09:57:45
А можно посчитать экспериментально. Одна девочка написала: «Мой папа командир полка. Он выстроил по кругу 300 солдат и приказал им пересчитаться в соответствии с  условием. Остался солдат под номером 191 . Он помог мне решить остальные задачи олимпиады, так как окончил 2 курса  математического факультета».


Название: Re: Везучая теща
Отправлено: семеныч от Март 02, 2012, 12:22:13
тогда решите такую-же :)

У Васи день рождения такой:
365 дней.Выбрасываем каждое пятое число пока и не останется 1 день - день рождения Васи

это будет какое число какого месяца??


Название: Re: Везучая теща
Отправлено: kiwi от Март 02, 2012, 20:23:12
У меня вышел 86-й день, то есть 26 марта
Правда, вероятность, что я в ходе вычёркиваний ошиблась, ОООчень велика...


Название: Re: Везучая теща
Отправлено: Seamew от Март 02, 2012, 20:25:15
ну должен же быть какой-то алгоритм... на 1-ом, 2-ом шаге симметрию нашла..
а дальше никак((


Название: Re: Везучая теща
Отправлено: kiwi от Март 02, 2012, 20:32:47
Я делала тупо: сказали вычеркивать - окай, будем вычёркивать


Название: Re: Везучая теща
Отправлено: Seamew от Март 02, 2012, 20:41:14
ну это одноразовый подход.. должна же быть общая формула для расчета любого набора цифр


Название: Re: Везучая теща
Отправлено: fortpost от Март 02, 2012, 21:12:16
После долгих и сложных расчетов получается 91 день. Ему соответствует дата 1 апреля. Зная Семёныча, приходим к выводу, что ответ правильный.


Название: Re: Везучая теща
Отправлено: fortpost от Март 02, 2012, 21:21:21
ну это одноразовый подход.. должна же быть общая формула для расчета любого набора цифр
Та не так все просто. Этой задаче почти 2000 лет, и общее решение до сих пор не найдено.
Подробности здесь.  Задача Иосифа Флавия (http://ru.wikipedia.org/wiki/%C7%E0%E4%E0%F7%E0_%C8%EE%F1%E8%F4%E0_%D4%EB%E0%E2%E8%FF)


Название: Re: Везучая теща
Отправлено: moonlight от Март 02, 2012, 21:54:40
Я тоже программой считал. Вот моя.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Fortpost
{
    class Program
    {
        struct A
        {
            public int pred, next;
        }

        static int F(int n, int k)
        {
            A[] mass = new A[n];
            for (int i = 0; i < n; i++)
            {
                mass[i].pred = (i == 0 ? n - 1 : i - 1);
                mass[i].next = (i == n - 1 ? 0 : i + 1);
            }
            int p = 0;
            while (mass[p].next != mass[p].pred)
            {
                int s = 0;
                while (s < k)
                {
                    p = mass[p].next;
                    s++;
                }
                mass[mass[p].pred].next = mass[p].next;
                mass[mass[p].next].pred = mass[p].pred;
            }
            return mass[p].next;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(F(300, 3));
            Console.ReadLine();
        }
    }
}