Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Мэтт
1 / 1 / 0
Регистрация: 06.11.2016
Сообщений: 27
1

Список: Определите порядок выбывания людей из круга...

11.11.2018, 07:15. Просмотров 915. Ответов 5

Всем привет!

С prolog я не сталкивался, и честно не понимаю как он работает, но мне нужно реализовать следующую программу, связанную со списками. Может эта задача уже решалась на форуме и я ее просто не нашел, но если вы мне поможете будет просто отлично.

Условие задачи:
По кругу расположены n человек. Начиная с некоторой позиции, считаем от 1 до m по кругу. Каждый m-ый человек выбывает из круга, при этом круг смыкается. Определите порядок выбывания из круга.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2018, 07:15
Ответы с готовыми решениями:

Задача про выбывающих из круга людей.
По кругу расположено N человек. Начиная с некоторой позиции, мы считаем по кругу и каждый третий...

Напишите программу, которая определяет порядок, в котором люди выбывают из круга
Помогите написать программу по прологу. По кругу расположено N человек. Начиная с некоторой...

Найти список людей, чей день рождения попадает в заданный период
Здравствуйте, уважаемые форумчане! Только начал изучать язык Пролог и пока ещё мало что...

Определите предикат упорядоченный (Список)
помогите пожалуйста срочно надо. Определите предикат упорядоченный (Список) который принимает...

Исключение людей из круга
Вокруг считающегося стоят n человек, один из которых назван первым, остальные пронумерованы против...

5
arlat
410 / 394 / 85
Регистрация: 07.10.2013
Сообщений: 892
13.11.2018, 16:56 2
Лучший ответ Сообщение было отмечено Мэтт как решение

Решение

Если после смыкания круга, начинаем отсчет опять с первого, то где-то так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
out_list(Xs, M, Ys) :-
    M > 0,
    out_list(Xs, Xs, 1, M, Ys).
 
out_list([], [], _, _, []).
out_list([], [X0 | Xs0], N, M, Ys) :-
    !,
    out_list([X0 | Xs0], [X0 | Xs0], N, M, Ys).
out_list([X | _], Xs0, M, M, [X | Ys]) :-
    select1(X, Xs0, Xs1),
    !,
    out_list(Xs1, Xs1, 1, M, Ys).
out_list([_ | Xs], Xs0, N, M, Ys) :-
    N1 is N + 1,
    out_list(Xs, Xs0, N1, M, Ys).
 
select1(Elem, [Elem | Tail], Tail).
select1(Elem, [Head | Tail], [Head | Rest]) :-
    select1(Elem, Tail, Rest).
Иначе, нужно дорабатывать...

Добавлено через 1 минуту
Prolog
1
2
3
?- out_list([1,2,3,4,5,7,8,9], 3, Ys).
Ys = [3, 4, 5, 7, 8, 9, 1, 2] ;
false.
Добавлено через 1 минуту
Скорей всего, после смыкания продолжаем, позже сделаю...

Добавлено через 1 час 8 минут
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
out_list1(Xs, M, Ys) :-
    M > 0,
    out_list1(Xs, Xs, 1, M, Ys).
 
out_list1([], [], _, _, []).
out_list1([], [X0 | Xs0], N, M, Ys) :-
    !,
    out_list1([X0 | Xs0], [X0 | Xs0], N, M, Ys).
out_list1([X | Xs], Xs0, M, M, [X | Ys]) :-
    append(Xs1, [X | Xs], Xs0),
    append(Xs, Xs1, Xs2),
    !,
    out_list1(Xs2, Xs2, 1, M, Ys).
out_list1([_ | Xs], Xs0, N, M, Ys) :-
    N1 is N + 1,
    out_list1(Xs, Xs0, N1, M, Ys).
Prolog
1
2
3
?- out_list1([1,2,3,4,5,6,7,8,9], 3, Ys).
Ys = [3, 6, 9, 4, 8, 5, 2, 7, 1] ;
false.
append найдете...
2
Мэтт
1 / 1 / 0
Регистрация: 06.11.2016
Сообщений: 27
29.11.2018, 07:33  [ТС] 3
arlat, спасибо за решение, оно оказалось нужным, но могли бы вы мне объяснить как работает алгоритм так сказать в текстовом варианте?
0
arlat
410 / 394 / 85
Регистрация: 07.10.2013
Сообщений: 892
29.11.2018, 09:46 4
Цитата Сообщение от Мэтт Посмотреть сообщение
как работает алгоритм
какой вариант?
0
Мэтт
1 / 1 / 0
Регистрация: 06.11.2016
Сообщений: 27
29.11.2018, 10:23  [ТС] 5
arlat, второй, что позже скидывал
0
arlat
410 / 394 / 85
Регистрация: 07.10.2013
Сообщений: 892
30.11.2018, 10:14 6
1) найти позицию
2) реализовать смыкание
3) реализовать имитацию круга для списка
Моя реализация исходит от лени, - посему всё в одной рекурсии с использованием примечательных свойств библиотечного предиката append.
По хорошему надо именно по пп. 1, 2, 3
Можно и расписать, конечно, но в отладчике не пробовали пройти?
out_list1
0
Миниатюры
Список: Определите порядок выбывания людей из круга...  
30.11.2018, 10:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2018, 10:14

Вывод людей из круга
Помогите пожалуйста! Даны натуральные n, m. Предпологается, что n человек встают в круг и...

Составить программу, моделирующую процесс вычеркивания людей из круга
Пожалуйста помогите с этими заданиями. Коллекции (10) 2) В кругу стоят N человек, пронумерованных...

Определить порядок удаления ребят из круга
Смоделировать Игру В Детскую Считалочку На Выбывание С Использованием Структуры Кольцо. N Ребят...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru