![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 06.05.2009
Сообщений: 3
|
![]()
Доброго времени суток,Нашел я как-то в одной книге задачу. До сих пор бьюсь над ее решением. Может кто подскажет программу для ее решения (на Visual C++ либо VBA либо Паскаль). Вот текст задачи (на первый взгляд, ничего схожего с программированием):
Парламент состоит из N делегатов. Делегаты должны разделиться на группы (фракции); кол-во депутатов в каждой группе должно отличаться от кол-ва депутатов в любой другой группе. Каждый день каждая фракция посылает одного представителя в некий президиум. Парламент начинает работать в том случае, когда состав президиума отличен от составов президиумов предыдущих дней. Составить программу, которая бы определяла оптимальное число фракций и кол-во делегатов в каждой из них так, чтобы парламент мог работать как можно дольше. Рассчитанные значения кол-ва делегатов в каждой фракции, сортированные по возрастанию, вывести в выходном текстовом файле. Короче говоря, нужно разбить N на более простые числа, в сумме дающие это N. Причем начинать надо с двух элементов, рассмотрев все возможные варианты (например, если N=9, то: а=2, b=7 или a=3, b=6, или a=4, b=5). В каждом случае надо найти их наименьшее общее кратное (т.е. НОК(2,7)=14, НОК(3,6)=6, НОК(4,5)=20) и выбрать наибольшее. Точно такую-же операцию надо выполнить для трех элементов, четырех и т.д. В результате должна получиться комбинация чисел в сумме дающее N и имеющее наибольшее наименьшее общее кратное(!простите за тавтологию!). Вот два примера: N=7: 3 4 N=31: 2 3 5 6 7 8 Низкий поклон тому, кто сможет воплотить это задание в жизнь. |
![]() |
![]() |
![]() |
#2 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Для чего тебе нужно решение этой задачи? Ты же сам писал здесь: Цитата:
Обратись к победителям той олимпиады - у них наверняка есть готовый алгоритм |
||
![]() |
![]() |
![]() |
#3 | |
Регистрация: 06.05.2009
Сообщений: 3
|
![]() Цитата:
не всё так просто.... Олимпиада проходила в 1999 году,финалисты-наши с Санкт-Петербурга,это моё курсовое задание по дискретной математике..информацию про Олимпиаду я нашёл в одном старом журнале о программировании,все ссылки оттуда нерабочие,имён не указывается,в общем, глухо.... Сможете помочь? |
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 06.05.2009
Сообщений: 3
|
![]()
Программа найдена,кто-нибудь поможет с комментариями к ней?
Пожалуйста,буду благодарен Program Parliament; var fin,fout:text; i,k,n,suma,cat,rest,nt:integer; v,vsol:array[1..1000] of integer; pmax,pact:extended; begin assign(fin,'PARLIAM.IN'); reset(fin); readln(fin,n); close(fin); fillchar(v,sizeof(v),0); fillchar(vsol,sizeof(vsol),0); suma:=3; i:=2; pmax:=0; while (suma<=n) do begin cat:=(n-suma) div i; rest:=(n-suma)-(cat*i); for k:=1 to i do v[k]:=k+cat; k:=i; while (rest>0) do begin v[k]:=v[k]+1; dec(rest); dec(k); end; pact:=0; for k:=1 to i do pact:=pact+ln(v[k]); if (pact>pmax) then begin pmax:=pact; move(v,vsol,sizeof(v)); nt:=i; end; i:=i+1; suma:=suma+i; end; assign(fout,'PARLIAM.OUT'); rewrite(fout); write(fout,vsol[1]); for k:=2 to nt do write(fout,' ',vsol[k]); writeln(fout); close(fout); end. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ибо со мной что то не то,либо с паскалем!Поглядите! | VHomer | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 03.12.2008 22:08 |
как обращатся к чему либо | WOLFak | Общие вопросы Delphi | 3 | 13.02.2008 06:06 |
Как расчитать математическую формулу либо физическую? | pentiumForever | Общие вопросы Delphi | 7 | 13.09.2007 14:07 |
Возможности ДубльГИС для интеграции с чем-либо | 2gis | Софт | 2 | 04.03.2007 03:41 |