ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Задача Иосифа Флавия
  #1  
Старый 20.01.2009, 07:08
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию Задача Иосифа Флавия

Сущ-т легенда что Иосиф Флавий выжил и стал известным благодоря математической одаренности. В ходе Иудейской войны он в составе отряда из 41 иудейского воина был загнан римлянами в пещеру. Предпочитая самоубийство в плену, воины решили выстроится в круг и последовательно убивать каждого 3го из живых до тех пор пока е останется ни одного человека. Однако Иосиф на ряду с 1 из единомышленников счел подобный конец бессмысленным - он быстро вычеслил места в круге на которые себя и товарища. И лишь поэтому остался жив.
Исключать k-го, пока не останется 1 человек. Определить номер уцелевшего.

как на пхп реализовать а то я уже вешаюсь
 
Ответить с цитированием

  #2  
Старый 20.01.2009, 07:27
kolpeex
Новичок
Регистрация: 17.02.2008
Сообщений: 28
Провел на форуме:
68228

Репутация: 39
По умолчанию

А правильный ответ какой?
Если исключать каждого k-го человека, то в конце останутся k первых человек. Так?
Если да, то могу привести код, который привел меня к такому выводу.

Неправильно.

P.S. Уже почти дописал правильный код.

Последний раз редактировалось kolpeex; 20.01.2009 в 07:35..
 
Ответить с цитированием

  #3  
Старый 20.01.2009, 07:58
Trieg
Познающий
Регистрация: 26.10.2007
Сообщений: 83
Провел на форуме:
394231

Репутация: 50
По умолчанию

PHP код:

$n 
271;
$tempN decbin($n);
//Ищем первую 1 и оставляем в строке усе что после первой единицы
$tempN substr($tempNstrpos($tempN'1') + 1);
//Чистим строку от нулей которые идут до первой единицы (их может и не быть..)
$tempN substr($tempNstrpos($tempN'1'));
$res bindec($tempN.'1'); // Вот что искали..
echo 'Номер уцелевшего:'.$res
Сам я в подобном не шарю.. в общем залез в гугл нашел алгоритм решения и реализовал его на пыхе (может и корявенько.. но на более у меня нет времени)

1) число n перевести в двоичную систему;

2) в полученном двоичном числе первую слева единицу приписать в конце

3) перевести получившееся число в десятичную систему счисления.
 
Ответить с цитированием

  #4  
Старый 20.01.2009, 08:03
kolpeex
Новичок
Регистрация: 17.02.2008
Сообщений: 28
Провел на форуме:
68228

Репутация: 39
По умолчанию

Код:
<?php
    //исключаем каждого $k-го
    $k = 3;
    //создаем 41 иудейского война
    $warriors = range(1,41);
    
    echo '<pre>';
    $i=0;
    $offset=0;
    while(count($warriors)>=$k) {
        $i++;
        if($i%$k==0) { //убиваем этого
            $offset = ($offset+2) % count($warriors);
            //echo $i.', ['.$offset.']='.$warriors[$offset]."\n";
            array_splice($warriors, $offset, 1);
        }
    }
    print_r($warriors);
$k и кол-во иудейских войнов можно изменить - все работает.

Последний раз редактировалось kolpeex; 20.01.2009 в 08:05..
 
Ответить с цитированием

  #5  
Старый 20.01.2009, 08:05
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию

я сам не могу понять ) какой правельный
 
Ответить с цитированием

  #6  
Старый 20.01.2009, 08:08
kolpeex
Новичок
Регистрация: 17.02.2008
Сообщений: 28
Провел на форуме:
68228

Репутация: 39
По умолчанию

Для простоты берем 8 войнов и вычеркиваем каждого третьего по кругу:
12345678
12_45678
12_45_78 (*)
_2_45_78
_2_4__78
___4__78
___4__7_

(*)Вычеркивание по кргу значит:
Берем 12_45_78. Следующий для удал. эелемент как бы 9. Ставим рядом.
12_45_7812_45_78
Вычеркиваем "9" эелемент.
12_45_78_2_45_78. Убираем первую часть.
_2_45_78

Последний раз редактировалось kolpeex; 20.01.2009 в 08:11..
 
Ответить с цитированием

  #7  
Старый 20.01.2009, 08:12
Trieg
Познающий
Регистрация: 26.10.2007
Сообщений: 83
Провел на форуме:
394231

Репутация: 50
По умолчанию

ну да.. у мя непрально так как k = 2.. лоханулся я =)
 
Ответить с цитированием

  #8  
Старый 20.01.2009, 08:18
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию

мда мозги у меня не варят 5 часов убил блин
 
Ответить с цитированием

  #9  
Старый 22.01.2009, 23:51
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию

неа не правильно кстати :-)
 
Ответить с цитированием

  #10  
Старый 22.01.2009, 23:56
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию

если ввести что убивать каждого 7 и войнов будет 8 то (!)7 останиться живым
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите ! Задача 3-го класса (физика) Ci5 Болталка 20 07.01.2009 00:29
задача Pascal P3L3NG Болталка 2 28.12.2008 17:20
ЗАДАЧА ДЛЯ ГУРУ n0153r Болталка 21 28.12.2008 16:45
Задача на Ассемблере NEt_hunter С/С++, C#, Delphi, .NET, Asm 1 27.10.2006 22:15
Стоит следующая задача. Отлавливаем снифер. Егорыч+++ PHP, PERL, MySQL, JavaScript 21 27.07.2005 16:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ