![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Tenshi |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
В парламенте острова Невезения каждый из N = 6 депутатов имеет не более М = 2 врагов. ( Если А - враг Б, то Б - враг А). Для уменьшения разногласий президент решил преобразовать парламент в двухпалатный.
Составить программу, которая проверяет, можно ли парламент разделить на две палаты так, что быу каждого депутата в своей палате было не более М врагов. |
Michael_Rybak |
![]()
Сообщение
#2
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
ну и что теперь? я тоже много задач знаю. в том числе и на логику.
|
Tenshi |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Хотел спросить совета как мне ее решить. Можно и по вежливей общаться
|
trew |
![]()
Сообщение
#4
|
![]() Пионер в программировании ![]() ![]() Группа: Пользователи Сообщений: 66 Пол: Мужской Репутация: ![]() ![]() ![]() |
теорию вероятности выучи тогда и помощи не надо будет просить
![]() |
Michael_Rybak |
![]()
Сообщение
#5
|
|||
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Цитата Хотел спросить совета как мне ее решить. Можно и по вежливей общаться можно, конечно можно! давай повежливее, только давай начнем с тебя, ок? твой первый пост написан в приказном тоне. перечитай. Добавлено через 1 мин. Цитата теорию вероятности выучи тогда и помощи не надо будет просить
Добавлено через 3 мин. Tenshi, по теме: с помощью шести вложенных циклов перебираешь все возможные разделения парламента на 2 палаты, и для каждого из них проверяешь нужное тебе условие. что из этого вызывает затруднения? |
|||
Tenshi |
![]() ![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Писал с компа в универе. Успел написать тока условие быстро.
З.ы. Теорию вероятности не знаю, ибо такого не учил. З.з.ы. Вызывает затруднение как сравнивать этих самых депутатов. Вот алгоритм моих действий: ![]() Код У первого враг 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 - 22.05.2008 14:01 |
klem4 |
![]()
Сообщение
#7
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата У второго - 3,4 и 1 (по условию Если А - враг Б, то Б - враг А) => заносим второго в другую палату. У третьего враг 4 и 5 Если у второго во врагах третий, то у третьего помимо 4 и 5 должно быть 2. И далее такие же ошибки в примере. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Второго заносим в другую палату, соответственно в первой палате он уже не является врагом. Однако, если во второй палате находятся 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 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Таак. Смотри:
Цитата у 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 Репутация: ![]() ![]() ![]() |
Не более 2 врагов на рыло, если два, то они спокойно могут сосуществовать
![]() Я исправил итог, там вроде правильно Добавлено через 7 мин. С условием вроде разобрались, а как написать прогу? Завтра сдавать курсовую, преподаватель вроде сам невоткнул как ее писать и подсказать не смог =( Буду рад хотя бы части кода например как сравнить первого, второго и третьего, а дальше думаю аналогичным способом писать. Идей нет совершенно поэтому и спрашиваю =) Сообщение отредактировано: Tenshi - 22.05.2008 14:45 |
klem4 |
![]()
Сообщение
#11
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Опять не верно, первый с третьим не могут быть в одной палате,
Цитата у 1 враг 3 и 5 у 3 враг 5 и 1 Они ведь ненавидят друг друга. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Стоп, ты не так понял.
У каждого из депутатов в своей палате может быть не более 2 врагов. У 1 в палате два врага и у остальных по два. Вот в чем суть |
klem4 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
если у первого враг - третий, это означает автоматически что у третьего враг - первый, верно ?
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tenshi |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
|
Michael_Rybak |
![]()
Сообщение
#15
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Цитата З.ы. Теорию вероятности не знаю, ибо такого не учил. в этой задаче она не понадобится. Цитата З.з.з.ы А как это через циклы сделать йа что-то не пойму? смотри. у тебя шесть человек. каждый будет либо в палате 1, либо в палате 2. шестью вложенными циклами перебираем, кто в какой палате: for a := 1 to 2 do // номер палаты, в которую попал депутат A |
Tenshi |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Мое огромнейшее спасибо
![]() |
Tenshi |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Код is_enemy[a, b] Непонятно как они задаются и какого типа? ///Ой туплю...сорри вопрос исчерпан =) Сообщение отредактировано: Tenshi - 22.05.2008 16:53 |
Michael_Rybak |
![]()
Сообщение
#18
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
ой. только я ошибся - там не break а continue везде: нам нужно продолжать цикл для следующего значения f, а не прерывать его.
|
Tenshi |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
А как будет вывод найденного решения выглядеть?
|
Tenshi |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Реальное имя: Artem Репутация: ![]() ![]() ![]() |
Код 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. Посмотрите пожалуйста где касяки и как вывести результат. Код не работает (В основном конечно из-за прямоты рук >_<) |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:12 |