Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
23 / 12 / 2
Регистрация: 23.08.2010
Сообщений: 100

Задача про плавцов

23.05.2013, 14:58. Показов 3130. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Попалась задача про плавцов:
В соревнованиях по плаванию участвовало 5 спортсменов. Плыли они по дорожкам 1,2,3,4,5
Относительно результатов соревнований, некий человек в шутку заметил:
спортсмены плывшие по нечетным дорожкам, оказались на четных местах и наоборот, спортсмеы плывшие по четным дорожкам, оказались на нечетных местах. Сколько всего существует различных вариантов исхода соревнований?

По логике, эта задача нерешаемае, т.к. нечетных дорожек больше чем четных. Это ладно, а вот если четное количество дорожек, то вот такое я решение сделал:
Code
1
2
3
4
5
6
7
8
9
10
domains
    col = integer.
predicates
    test(col).
    out(col).
clauses
    test(X):-X mod 2 > 0, write("no solutions");Y=X/2,out(Y).
    out(Y):-Z=Y*Y,write(Z).
goal
    test(4).
Результат показывает правильный, но преподаватель попросил, чтобы я вывел на экран каждый вариант, например для 4-х дорожек:
2 1 4 3
4 3 2 1
2 3 4 1
4 1 2 3
вот не могу сообразить как это сделать, помогите пожалуйста.
Спасибо заранее за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2013, 14:58
Ответы с готовыми решениями:

Задача про взлом кода из книги Эрика Фримена про основы javascript в конце 5 главы.
читаю книгу Эрика Фримена про основы javascript.В конце 5 главы есть задачка про взлом кода.Никак не могу понять как ее решить.НЕ понимаю...

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

Задача про IP
Простите что не совсем в тему , но у меня ответ 97.15.81.53/15 , но говорят это неправильно Дана сеть 97.0.0.0/8 Надо разбить ...

17
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
01.11.2013, 00:20
Здравствуйте! Подскажите ,Как реализовать решение этой задачи средствами пролога.
задача про плавцов:
В соревнованиях по плаванию участвовало 5 спортсменов. Плыли они по дорожкам 1,2,3,4,5
Относительно результатов соревнований, некий человек в шутку заметил:
спортсмены плывшие по нечетным дорожкам, оказались на четных местах и наоборот, спортсмеы плывшие по четным дорожкам, оказались на нечетных местах. Сколько всего существует различных вариантов исхода соревнований?
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
02.11.2013, 01:19
У меня возникла идея, которая может дать возможное решение. Итак, по условию пловцы с четных дорожек заняли нечетные места и наоборот.

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

Для удовлетворения условиям задачи возможно два варианта турнирной таблицы: М1-М2-М2-М3-М4 и М1-М2-М3-М4-М4. Определить соответствие дорожки пловца его месту в турнирной таблице, засчет перебора фактов по условию задачи. Получается, что нам нужно найти дорожки, на которых был показан одинаковый результат.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
predicates
nondeterm way(integer)
nondeterm place(integer)
nondeterm var_1
nondeterm var_2
clauses
way(1).
way(2).
way(3).
way(4).
way(5).
place(1).
place(2).
place(3).
place(4).
place(5).
var_1:-place(X1),place(X2),place(X3),place(X4),place(X5),X1 mod 2=0,X5 mod 4=0,
       X2 mod 2<>0,X3 mod 2<>0,X4 mod 2<>0,
       X2<>X3,X3<>X4,X2<>X4,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5),nl,fail.   %печатаем номера дорожек        
var_1.
var_2:-place(X1),place(X2),place(X3),place(X4),place(X5),X1 mod 2=0,X3 mod 4=0,X2<>2,
       X2 mod 2<>0,X4 mod 2<>0,X5 mod 2<>0,
       X2<>X5,X5<>X4,X2<>X4, 
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5),nl,fail.   %печатаем номера дорожек       
var_2.
goal
write("M1-M2-M2-M4-M5"),nl, %турнирная таблица 1
var_1,
write("M1-M2-M3-M4-M4"),nl,%турнирная таблица 1
var_2.
P.S. Решение, правда, громоздким получилось
1
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
05.11.2013, 02:11
Цитата Сообщение от keidin Посмотреть сообщение
У меня возникла идея, которая может дать возможное решение. Итак, по условию пловцы с четных дорожек заняли нечетные места и наоборот.

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

Для удовлетворения условиям задачи возможно два варианта турнирной таблицы: М1-М2-М2-М3-М4 и М1-М2-М3-М4-М4. Определить соответствие дорожки пловца его месту в турнирной таблице, засчет перебора фактов по условию задачи. Получается, что нам нужно найти дорожки, на которых был показан одинаковый результат.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
predicates
nondeterm way(integer)
nondeterm place(integer)
nondeterm var_1
nondeterm var_2
clauses
way(1).
way(2).
way(3).
way(4).
way(5).
place(1).
place(2).
place(3).
place(4).
place(5).
var_1:-place(X1),place(X2),place(X3),place(X4),place(X5),X1 mod 2=0,X5 mod 4=0,
       X2 mod 2<>0,X3 mod 2<>0,X4 mod 2<>0,
       X2<>X3,X3<>X4,X2<>X4,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5),nl,fail.   %печатаем номера дорожек        
var_1.
var_2:-place(X1),place(X2),place(X3),place(X4),place(X5),X1 mod 2=0,X3 mod 4=0,X2<>2,
       X2 mod 2<>0,X4 mod 2<>0,X5 mod 2<>0,
       X2<>X5,X5<>X4,X2<>X4, 
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5),nl,fail.   %печатаем номера дорожек       
var_2.
goal
write("M1-M2-M2-M4-M5"),nl, %турнирная таблица 1
var_1,
write("M1-M2-M3-M4-M4"),nl,%турнирная таблица 1
var_2.
P.S. Решение, правда, громоздким получилось
А если предположить что шесть дорожек?
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
05.11.2013, 11:04
Если число дорожек четное, то все варианты расположения плавцов можно получить так (это для 6 дорожек):
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
predicates
 
nondeterm place(integer)
nondeterm var_1
 
clauses
 
place(1).
place(2).
place(3).
place(4).
place(5).
place(6).
 
var_1:-place(X1),place(X2),place(X3),place(X4),place(X5),place(X6),
       X2 mod 2<>0,X4 mod 2<>0,X6 mod 2<>0,X2<>X4,X2<>X6,X4<>X6,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-",X6),nl,fail.   %печатаем номера дорожек        
var_1.
 
goal
write("M1-M2-M3-M4-M5-M6"),nl, %турнирная таблица
var_1.
И да, факты way(integer) были вообще лишними)))
0
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
06.11.2013, 01:20
Цитата Сообщение от keidin Посмотреть сообщение
Если число дорожек четное, то все варианты расположения плавцов можно получить так (это для 6 дорожек):
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
predicates
 
nondeterm place(integer)
nondeterm var_1
 
clauses
 
place(1).
place(2).
place(3).
place(4).
place(5).
place(6).
 
var_1:-place(X1),place(X2),place(X3),place(X4),place(X5),place(X6),
       X2 mod 2<>0,X4 mod 2<>0,X6 mod 2<>0,X2<>X4,X2<>X6,X4<>X6,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-",X6),nl,fail.   %печатаем номера дорожек        
var_1.
 
goal
write("M1-M2-M3-M4-M5-M6"),nl, %турнирная таблица
var_1.
И да, факты way(integer) были вообще лишними)))
А нельзя как-то иметь возможность дать на вход исходные пять дорожек и получить ожидаемое "нет решений"?
Как по отдельности это должно выглядеть представляю,а вот вместе что-то не очень.
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
06.11.2013, 01:56
Хм, да а что собственно представлять? из предыдущего варианта убрать условия, связанные с Х6, да и поместить все это в goal.
0
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
06.11.2013, 02:33
Цитата Сообщение от keidin Посмотреть сообщение
Хм, да а что собственно представлять? из предыдущего варианта убрать условия, связанные с Х6, да и поместить все это в goal.
эм...как я условия в цель засуну?...
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
06.11.2013, 11:02
Для этого нужно было самому немного подумать))
Можно сделать так:
Prolog
1
2
3
4
5
  goal
       place(X1),place(X2),place(X3),place(X4),place(X5),
       X2 mod 2<>0,X4 mod 2<>0,X2<>X4,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-"),nl.
И в ответе будем желаемое No Solution
0
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
06.11.2013, 20:31
Цитата Сообщение от keidin Посмотреть сообщение
Для этого нужно было самому немного подумать))
Можно сделать так:
Prolog
1
2
3
4
5
  goal
       place(X1),place(X2),place(X3),place(X4),place(X5),
       X2 mod 2<>0,X4 mod 2<>0,X2<>X4,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-"),nl.
И в ответе будем желаемое No Solution
Примерно так представлял,только тут в ответе 36 решений.
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
06.11.2013, 22:16
Ну а я не представляю, как у Вас получилось 36 решений. Могли бы скриншот с полученными вариантами прикрепить
0
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
06.11.2013, 22:28
Цитата Сообщение от keidin Посмотреть сообщение
Ну а я не представляю, как у Вас получилось 36 решений. Могли бы скриншот с полученными вариантами прикрепить
Простите,скрин во вложении.
Миниатюры
Задача про плавцов  
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
06.11.2013, 22:42
Факты place служат для определения дорожки, соответственно для 5 дорожек place(6) нужно убрать.
0
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
06.11.2013, 22:47
Цитата Сообщение от keidin Посмотреть сообщение
Факты place служат для определения дорожки, соответственно для 5 дорожек place(6) нужно убрать.
Невнимательность губит людей(
спасибо)
0
 Аватар для SnakeLight
2 / 2 / 0
Регистрация: 23.09.2008
Сообщений: 54
15.11.2013, 15:45
В соревнованиях по плаванию участвовало 5 спортсменов. Имена их установить так и не удалось, однако известно, что плыли они по первой, второй, третьей, четвертой и пятой дорожкам.
Относительно результатов соревнований некий любитель острого словца заметил, что
1) те спортсмен, которые плыли по нечетным дорожкам, закончив дистанцию, оказались на четных местах;
2) те спортсмены, которые заняли четные места, не плыли по четным дорожкам.
Сколько всего существует различных вариантов исхода соревнований (если известно, что все участники соревнований показали различное время?)

А вот теперь само задание:
Сколько решений будет иметь предыдущая задача, если спортсмен, плывший ранее по четвертой дорожке, не будет допущен к соревнованиям? (Для удобства оставшиеся дорожки мы перенумеруем заново 1,2,3 и 4).

Помогите пожалуйста с этим заданием, а то совсем беда у меня с этим прологом. Буду очень благодарен людям которые могут мне.
0
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 79
21.11.2013, 02:25
Цитата Сообщение от keidin Посмотреть сообщение
Для этого нужно было самому немного подумать))
Можно сделать так:
Prolog
1
2
3
4
5
  goal
       place(X1),place(X2),place(X3),place(X4),place(X5),
       X2 mod 2<>0,X4 mod 2<>0,X2<>X4,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-"),nl.
И в ответе будем желаемое No Solution
В итоге получилась такая программа,теперь интересно можно ли вывести только первые 2 результата?То есть если мне нужен первый результат,то я просто воткну отсечение,а вот как бы мне отсечь не одно,а два решения? [PROLOG]
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
predicates
 
nondeterm place(integer)
nondeterm var_1
nondeterm var_2
nondeterm placed(integer)
clauses
 
place(1).
place(2).
place(3).
place(4).
place(5).
placed(1).
placed(2).
placed(3).
placed(4).
placed(5).
placed(6).
 
 
var_1:-place(X1),place(X2),place(X3),place(X4),place(X5),place(X6),
       X2 mod 2<>0,X4 mod 2<>0,X6 mod 2<>0,X2<>X4,X2<>X6,X4<>X6,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-",X6),nl,fail.        
var_1.
var_2:-placed(X1),placed(X2),placed(X3),placed(X4),placed(X5),placed(X6),
       X2 mod 2<>0,X4 mod 2<>0,X6 mod 2<>0,X2<>X4,X2<>X6,X4<>X6,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-",X6),nl,fail.       
var_2.
goal
      placed(X1),placed(X2),placed(X3),placed(X4),placed(X5),placed(X6),
       X2 mod 2<>0,X4 mod 2<>0,X6 mod 2<>0,X2<>X4,X2<>X6,X4<>X6,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       write(X1,"-",X2,"-",X3,"-",X4,"-",X5,"-",X6),nl.
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
21.11.2013, 15:43
Для получения двух решений нужно "вручную" воздействовать на процесс перебора фактов.
Например так:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
domains
ilist=integer*
 
predicates
nondeterm var_2(ilist)
nondeterm run
nondeterm placed(integer)
nondeterm eql_list(ilist,ilist)
 
clauses
placed(1).
placed(2).
placed(3).
placed(4).
placed(5).
placed(6).
 
eql_list([H|T1],[H|T2]):-eql_list(T1,T2).
eql_list([],[]). 
 
var_2(L):-placed(X1),placed(X2),placed(X3),placed(X4),placed(X5),placed(X6),
       X2 mod 2<>0,X4 mod 2<>0,X6 mod 2<>0,X2<>X4,X2<>X6,X4<>X6,
       X1 mod 2=0,X3 mod 2=0,X5 mod 2=0,X1<>X3,X1<>X5,X3<>X5,
       L=[X1,X2,X3,X4,X5,X6]. 
       
run:- var_2(L1),var_2(L2),not(eql_list(L1,L2)),write(L1),nl,write(L2).      
 
goal
run.
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
21.11.2013, 17:41
Цитата Сообщение от SnakeLight Посмотреть сообщение
В соревнованиях по плаванию участвовало 5 спортсменов. Имена их установить так и не удалось, однако известно, что плыли они по первой, второй, третьей, четвертой и пятой дорожкам.
Относительно результатов соревнований некий любитель острого словца заметил, что
1) те спортсмен, которые плыли по нечетным дорожкам, закончив дистанцию, оказались на четных местах;
2) те спортсмены, которые заняли четные места, не плыли по четным дорожкам.
Сколько всего существует различных вариантов исхода соревнований (если известно, что все участники соревнований показали различное время?)

А вот теперь само задание:
Сколько решений будет иметь предыдущая задача, если спортсмен, плывший ранее по четвертой дорожке, не будет допущен к соревнованиям? (Для удобства оставшиеся дорожки мы перенумеруем заново 1,2,3 и 4).

Помогите пожалуйста с этим заданием, а то совсем беда у меня с этим прологом. Буду очень благодарен людям которые могут мне.
? п.1. Как могут три спортсмена 1, 3, 5 дорожек, уместиться в двух чётных местах
? п.2. В чем правило? Понятно, что чётные места не плыли по чётным дорожкам, т.к. чётные места по п.1. заняли нечётные дорожки
Дальше можно не рассуждать, разве что задача с подвохом, т.е. первым приближением к решению д.б. выше изложенные вопросы преподавателю...

Добавлено через 6 минут
Цитата Сообщение от olejik Посмотреть сообщение
Здравствуйте! Попалась задача про плавцов:
В соревнованиях по плаванию участвовало 5 спортсменов. Плыли они по дорожкам 1,2,3,4,5
Относительно результатов соревнований, некий человек в шутку заметил:
спортсмены плывшие по нечетным дорожкам, оказались на четных местах и наоборот, спортсмеы плывшие по четным дорожкам, оказались на нечетных местах. Сколько всего существует различных вариантов исхода соревнований?
По логике, эта задача нерешаемае, т.к. нечетных дорожек больше чем четных.
olejik хоть что-то заметил
Как вообще можно делать программу, если даже просто анализ текста дает фигню?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2013, 17:41
Помогаю со студенческими работами здесь

Задача про домино
Здравствуйте, помогите пожалуйста разобраться со следующей задачей: Из набора домино (28 штук) выбирают 7 штук. Какова неопределенность...

Задача про подстроку
Не как не получается сделать( Вставить в строку F в позицию Z подстроку &quot;утро&quot; , а в позицию R число S. Вывести на экран символьную...

Задача про снаряд
Снаряд массой m=10 кг обладал скоростью v=200 м/с в верхней точки траектории. В этой точке он разорвался на две части. Меньшая массой m1=3...

задача про экран
препод кинул задачку, а мы - нубы. объяснитеход решения пожалуйстп 1366x768 32бита,зажаты клавиши shift, Q и пробел, то чему равно...

Задача про матрицу
Помогите решить задачу или скиньте ссылку на похожую. Заранее спасибо! &quot;Задача 11. Вводится матрица a(m,n) из 0 и 1. Найти в ней...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru