Задача на логику |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на логику |
Tenshi |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
В парламенте острова Невезения каждый из N = 6 депутатов имеет не более М = 2 врагов. ( Если А - враг Б, то Б - враг А). Для уменьшения разногласий президент решил преобразовать парламент в двухпалатный.
Составить программу, которая проверяет, можно ли парламент разделить на две палаты так, что быу каждого депутата в своей палате было не более М врагов. |
Michael_Rybak |
Сообщение
#2
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
ну и что теперь? я тоже много задач знаю. в том числе и на логику.
|
Tenshi |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Хотел спросить совета как мне ее решить. Можно и по вежливей общаться
|
trew |
Сообщение
#4
|
Пионер в программировании Группа: Пользователи Сообщений: 66 Пол: Мужской Репутация: 0 |
теорию вероятности выучи тогда и помощи не надо будет просить
|
Michael_Rybak |
Сообщение
#5
|
|||
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата Хотел спросить совета как мне ее решить. Можно и по вежливей общаться можно, конечно можно! давай повежливее, только давай начнем с тебя, ок? твой первый пост написан в приказном тоне. перечитай. Добавлено через 1 мин. Цитата теорию вероятности выучи тогда и помощи не надо будет просить
Добавлено через 3 мин. Tenshi, по теме: с помощью шести вложенных циклов перебираешь все возможные разделения парламента на 2 палаты, и для каждого из них проверяешь нужное тебе условие. что из этого вызывает затруднения? |
|||
Tenshi |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Писал с компа в универе. Успел написать тока условие быстро.
З.ы. Теорию вероятности не знаю, ибо такого не учил. З.з.ы. Вызывает затруднение как сравнивать этих самых депутатов. Вот алгоритм моих действий: Код У первого враг 2 и 3 У второго - 3,4 и 1 (по условию Если А - враг Б, то Б - враг А) => заносим второго в другую палату. У третьего враг 4 и 5 У четвертого враг 5,6 и 3 (по тому же условию) => заносим в другую палату У пятого враг 6 и 1 У шестого враг 1,2 и 5 (...) => заносим в другую палату Итого получилось: В первой палате осталось: у 1 враг 3 и 5 у 3 враг 5 у 5 враг 1 и 3 Во второй палате: у 2 враг 4 у 4 враг 2 и 6 у 6 враг 4 Если у кого-нибудь есть время и желание помочь. З.з.з.ы А как это через циклы сделать йа что-то не пойму? Сообщение отредактировано: Tenshi - |
klem4 |
Сообщение
#7
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Цитата У второго - 3,4 и 1 (по условию Если А - враг Б, то Б - враг А) => заносим второго в другую палату. У третьего враг 4 и 5 Если у второго во врагах третий, то у третьего помимо 4 и 5 должно быть 2. И далее такие же ошибки в примере. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Второго заносим в другую палату, соответственно в первой палате он уже не является врагом. Однако, если во второй палате находятся 2 и 4 (а по условию на картинке и, следуя из (Если А - враг Б, то Б - враг А) они враги.
Отсюда и такой итог Цитата В первой палате осталось: у 1 враг 3 и 5 у 3 враг 5 у 5 враг 1 и 3 Во второй палате: у 2 враг 4 у 4 враг 2 и 6 у 6 враг 4 Добавлено через 11 мин. Единственно может где я ошибся это в итоговом количестве Исправлено: Код В первой палате: у 1 враг 3 и 5 у 3 враг 5 и 1 у 5 враг 1 и 3 Во второй палате: у 2 враг 4 и 6 у 4 враг 2 и 6 у 6 враг 2 и 4 |
klem4 |
Сообщение
#9
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Таак. Смотри:
Цитата у 1 враг 3 и 5 у 3 враг 5 Если у 1 есть враг 3, это означает что у 3 есть враг 1, верно ? Значит 1 и 3 в одной палате быть никак не могут. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Не более 2 врагов на рыло, если два, то они спокойно могут сосуществовать
Я исправил итог, там вроде правильно Добавлено через 7 мин. С условием вроде разобрались, а как написать прогу? Завтра сдавать курсовую, преподаватель вроде сам невоткнул как ее писать и подсказать не смог =( Буду рад хотя бы части кода например как сравнить первого, второго и третьего, а дальше думаю аналогичным способом писать. Идей нет совершенно поэтому и спрашиваю =) Сообщение отредактировано: Tenshi - |
klem4 |
Сообщение
#11
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Опять не верно, первый с третьим не могут быть в одной палате,
Цитата у 1 враг 3 и 5 у 3 враг 5 и 1 Они ведь ненавидят друг друга. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Стоп, ты не так понял.
У каждого из депутатов в своей палате может быть не более 2 врагов. У 1 в палате два врага и у остальных по два. Вот в чем суть |
klem4 |
Сообщение
#13
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
если у первого враг - третий, это означает автоматически что у третьего враг - первый, верно ?
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
|
Michael_Rybak |
Сообщение
#15
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата З.ы. Теорию вероятности не знаю, ибо такого не учил. в этой задаче она не понадобится. Цитата З.з.з.ы А как это через циклы сделать йа что-то не пойму? смотри. у тебя шесть человек. каждый будет либо в палате 1, либо в палате 2. шестью вложенными циклами перебираем, кто в какой палате: for a := 1 to 2 do // номер палаты, в которую попал депутат A |
Tenshi |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Мое огромнейшее спасибо
|
Tenshi |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Код is_enemy[a, b] Непонятно как они задаются и какого типа? ///Ой туплю...сорри вопрос исчерпан =) Сообщение отредактировано: Tenshi - |
Michael_Rybak |
Сообщение
#18
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
ой. только я ошибся - там не break а continue везде: нам нужно продолжать цикл для следующего значения f, а не прерывать его.
|
Tenshi |
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
А как будет вывод найденного решения выглядеть?
|
Tenshi |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: 0 |
Код program omg; type enemy= set of 'a'..'f'; var is_enemy:enemy; a,b,c,d,e,f,m:integer; a_enemies: integer; b_enemies: integer; c_enemies: integer; d_enemies: integer; e_enemies: integer; f_enemies: integer; procedure sortirovka; begin for a:=1 to 2 do for b:=1 to 2 do for c:=1 to 2 do for d:=1 to 2 do for e:=1 to 2 do for f:=1 to 2 do begin a_enemies:=0; if (a = b) and (is_enemy[a,b]) the inc(a_enemies); if (a = c) and (is_enemy[a,c]) the inc(a_enemies); if (a = d) and (is_enemy[a,d]) the inc(a_enemies); if (a = e) and (is_enemy[a,e]) the inc(a_enemies); if (a = f) and (is_enemy[a,f]) the inc(a_enemies); if a_enemies > m then continue; b_enemies:=0; if (b = a) and (is_enemy[b,a]) the inc(b_enemies); if (b = c) and (is_enemy[b,c]) the inc(b_enemies); if (b = d) and (is_enemy[b,d]) the inc(b_enemies); if (b = e) and (is_enemy[b,e]) the inc(b_enemies); if (b = f) and (is_enemy[b,f]) the inc(b_enemies); if b_enemies > m then continue; c_enemies:=0; if (c = a) and (is_enemy[c,a]) the inc(c_enemies); if (c = b) and (is_enemy[c,b]) the inc(c_enemies); if (c = d) and (is_enemy[c,d]) the inc(c_enemies); if (c = e) and (is_enemy[c,e]) the inc(c_enemies); if (c = f) and (is_enemy[c,f]) the inc(c_enemies); if c_enemies > m then continue; c_enemies:=0; if (d = a) and (is_enemy[d,a]) the inc(d_enemies); if (d = b) and (is_enemy[d,b]) the inc(d_enemies); if (d = c) and (is_enemy[d,c]) the inc(d_enemies); if (d = e) and (is_enemy[d,e]) the inc(d_enemies); if (d = f) and (is_enemy[d,f]) the inc(d_enemies); if d_enemies > m then continue; e_enemies:=0; if (e = a) and (is_enemy[e,a]) the inc(e_enemies); if (e = b) and (is_enemy[e,b]) the inc(e_enemies); if (e = c) and (is_enemy[e,c]) the inc(e_enemies); if (e = d) and (is_enemy[e,d]) the inc(e_enemies); if (e = f) and (is_enemy[e,f]) the inc(e_enemies); if e_enemies > m then continue; f_enemies:=0; if (f = a) and (is_enemy[f,a]) the inc(f_enemies); if (f = b) and (is_enemy[f,b]) the inc(f_enemies); if (f = c) and (is_enemy[f,c]) the inc(f_enemies); if (f = e) and (is_enemy[f,e]) the inc(f_enemies); if (f = d) and (is_enemy[f,d]) the inc(f_enemies); if f_enemies > m then continue; end; begin Writeln ('Kolichestvo vragov m: ',m); Readln (m); Sortirovka; end. Посмотрите пожалуйста где касяки и как вывести результат. Код не работает (В основном конечно из-за прямоты рук >_<) |
Текстовая версия | 4.05.2024 19:35 |