сортировка карточек с подстановочными знаками - PullRequest
0 голосов
/ 24 мая 2011

Я программирую карточную игру, и мне нужно отсортировать стопку карт по их рангу.так что они образуют непрерывную последовательность.в этой специальной игре карта со значением 2 может использоваться в качестве символа подстановки, поэтому, например, карты

 2 3 5 

должны быть отсортированы следующим образом

 3 2 5

, так как 2 заменяет4, в противном случае это не будет правильной последовательностью.

однако карты

2 3 4

должны оставаться такими, как есть.

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

2 2 3 4

также останется таким, как есть, потому что первые 2 заменят ACE (или 1, как бы вы это ни называли).

следующее не будетбыть допустимой входной последовательностью, поскольку один из 2 должен использоваться в качестве подстановочного знака, а другой - нет.тогда невозможно составить последовательность без промежутков.

2 4 2 6

Теперь мне сложно выяснить, используется ли 2 в качестве подстановочного знака или нет.как только я это получу, я думаю, что смогу сделать остальную часть сортировки

спасибо за любую алгоритмическую помощь по этой проблеме!

1 Ответ

4 голосов
/ 24 мая 2011

РЕДАКТИРОВАТЬ в ответ на ваше пояснение к вашему новому требованию:
Вы подразумеваете, что никогда не получите данные, для которых невозможно сформировать последовательность без промежутков. (Если бы я мог иметь такие гарантии в реальном мире.) Итак:

  • У вас есть 2?
    • Нет: ваша последовательность уже должна быть без промежутков.
    • Да: вам нужно выяснить, где его поставить.
  • Сортировка ввода. Вы видите разрыв? Поскольку вы можете использовать только один 2 в качестве подстановочного знака, может быть не более одного пробела.
    • Нет: относитесь к 2 как к законному числу два.
    • Да: сдвиньте 2 в пробел, чтобы заполнить его.

РЕДАКТИРОВАТЬ в соответствии с вашим новым требованием:
В этом случае просто найдите самый высокий одиночный зазор и закройте его 2, если у вас есть 2.

Оригинальный ответ:
Поскольку ваша последовательность должна быть без промежутков, вы можете посчитать количество имеющихся у вас двухсекунд и размеры всех имеющихся пробелов. Затем просто заполните самый большой пробел, для которого у вас есть достаточное количество 2 с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...