2015-02-21 2 views
1

Вот вопрос:Решения с использованием математического метода

Есть 100 человек (позволяет называть их 1 до 100) задача Whos устранить следующий человек к ним и передать инструмент убийства следующему человеку живого.

Пример:
1 должен устранить человека 2 и передать инструмент убийства лицу 3 и так далее.

Проблема в том, что я должен найти последнего человека, который жив.

Теперь я хочу решить проблему выше, используя формулу вместо массива. Решение, я думал, что-то вроде этого.

Я использовал Array из boolean, зацикливая их, помещая следующий индекс в false. Затем повторите цикл, чтобы найти, какой элемент остался верным.

Заранее спасибо

+1

Звучит хорошо до сих пор, теперь давайте посмотрим код. – gknicker

+0

Разве ответ не был бы «человеком в конце линии»? Таким образом, формула будет «длиной списка»? – neminem

+0

Они в очереди? Круг? Что-то странное? Кто получает оружие после человека 100? Кто убил бы человека 100? – genisage

ответ

1

Ответ не 99. Подумайте об этом в меньших условиях, как если бы там было всего 10 человек, то ответ не будет 9. Это, как алгоритм кончатся:

1 убивает 2 проходит до 3 3 убивает 4 проходит до 5 5 убивает 6 переходит к 7 7 убивает 8 переходит к 9 9 убивает 10 проходов до 1 - теперь люди 1,3,5,7,9 1 убивает 3 очка за 5 5 убийств: 7 с заездов до 9 - сейчас люди 1,5,9 9 убийств босса за 1 проход до 5 5 убивает 9; осталось только 5.

Для реализации этого помещает значение в ArrayList, и удалить убитый человеку, пока размер ArrayList не 1:

int numPeople = 100; 
    List<Integer> list = new ArrayList<Integer>(); 
    for(int i = 1; i <= numPeople; i++) list.add(i); 

    int current = 0; 
    while(list.size() > 1) 
    { 

     list.remove(current+1); 
     current++; 
     //Circle back around to the beginning 
     if(current+1 >= list.size()) current = current - list.size(); 
    } 
    System.out.println(list.get(0)); 
Смежные вопросы