IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача о вероятности, Задача полностью решена
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Помогите решить задачу:
Мальчик накапливал в копилке деньги. Однажды он увидел в магазине некий товар стоимостью S.
Дело в том что копилка заполнена не до конца, а разбивать ее можно лишь при 100% уверенности,
что количества денег будет достаточно. Но он не помнит сколько монет какого достоинства клал в копилку. Также известна масса пустой копилки и, конечно, текущая масса.
Известны соотношения Номинал <--> Масса монеты. Нужно определить минимальную вероятность и если она равна 100% вывести:"Вперед!!!!!!!!!!!" smile.gif
Я решил задачу, получилось что количество вложенных циклов равно количеству разновидностей монет.
Проблема в том, что заранее не известно число разновидностей
монет. blink.gif Также важно, что монеты, номинал которых больше, не всегда тяжелее. Но это не проблема...
Препод предложил идти через двумерный массив(M,N его - большие числа). И каким-то замысловатым способом из 2-х массивов(в первом - номиналы, во втором - массы) получаем массив [m,n]-й элемент к-рого - минимальное кол-во денег... Потом он сам запутался... wacko.gif
Мда.. blink.gif Давно я так не попадался...

Сообщение отредактировано: Zxzc -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Заинтересовала меня эта задачка тоже.. Мужики, вы зря не слушаете volvo - рекурсия тут решает все проблемы в несколько строчек. План примерно такой:

1. Подбираем удобную шкалу, чтоб удельные стоимости (УС) были целыми.
2. Упорядочиваем все типы монет в порядке возрастания УС.
3. Убираем лишние монеты (все, что можно набрать 2-ками весом в 2г, можно набрать и копейками весом 1г - значит, двушки не нужны)
4. Делим полный вес на вес монеты с наименьшей УС (№1). Если их количество вышло нецелым, вычитаем их массу из начальной массы, убираем монету №1 из расмотрения и повторяем то же самое с новой массой и новым набором монет. Если неудачно - убираем одну монету №1 и повторяем. И так до тех пор, пока не будет достигнуто соответствие либо не будет безрезультатно перебрано все.

Ниже даю код. Ошибок, вроде, нет, но проверял не очень тщательно. Если есть вопросы - пишите..

const
M=6; {Vsego tipov monet}
S=31; {Ves vseh monet v kopilke}

type
Int=integer;
tCoin=record
v,w:Int; {Value and Weight of a coin}
end;
tCoins=array[1..M]of tCoin;

var
Coin:tCoin;
i,j,x,y:Int;

const
N:Int=M;
{All known coin kinds}
Coins:tCoins=(
(v:1;w:4),
(v:2;w:8),
(v:5;w:20),
(v:10;w:3),
(v:20;w:6),
(v:50;w:23));
Scale:Int=1;
L:Int=0;
Total:Int=0;

function MinFill(c,R:Int):boolean;
{c - coin number as it appeares in Coins array}
{R - remaining coins total weight}
var
a:Int;

function CountDown:boolean;
begin
{Postepenno umenjshaem koli4estvo melkih monet}
while (a>=0)and not MinFill(c+1,R-a*Coins[c].w) do Dec(a);
CountDown:=a>=0
end;

begin
with Coins[c] do begin
a:=R div w;
MinFill:=(R mod w=0)or(c<N)and CountDown;
Inc(Total,a*v)
end
end;


begin
{Podbiraem shkalu, 4toby udelnye stoimosti byly celymi}
for i:=1 to N do with Coins[i] do
if ((v*Scale) mod w)>0 then Scale:=Scale*w;

{Uporyado4ivaem}
for i:=1 to N-1 do with Coins[i] do begin
x:=v*Scale div w;
y:=v;
for j:=i+1 to N do with Coins[j] do if x>v*Scale div w then begin
Coin:=Coins[i];
Coins[i]:=Coins[j];
Coins[j]:=Coin
end
end;

{Ubiraem lishie (c odinkovymi udelnymi stoimostyami)}
i:=1;
while i<N do with Coins[i+1] do begin
while (i<N)and(Coins[i].v*Scale div Coins[i].w=v*Scale div w) do begin
if Coins[i].v<v then x:=i+1 else x:=i;
for j:=x to N-1 do Coins[j]:=Coins[j+1];
Dec(N)
end;
Inc(i)
end;

{Vpered!}
if MinFill(1,S) then WriteLn('Minimal Total : ',Total) else WriteLn('No match found');
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Zxzc   Задача о вероятности   7.05.2006 2:33
volvo   Я решил задачу, получилось что количество вложенны…   7.05.2006 3:06
Zxzc   :no1: , рекурсия не причем. Вот моё, абсолютно не …   8.05.2006 2:51
volvo   :no1: , рекурсия не причем. Уверен? Я - нет... Смо…   8.05.2006 3:39
мисс_граффити   2. Если бы меньшей монете соответствовал меньший…   8.05.2006 13:23
zZz   а не судьба определить удельное достоинство каждой…   8.05.2006 14:25
Zxzc   volvo, MaxAvail в моем решении найден не верно. Го…   9.05.2006 1:28
zZz   одно маленькое дополнение: может получиться так чт…   9.05.2006 1:53
Zxzc   Да вся эта задача сплошная неприятность!…   9.05.2006 2:23
zZz   предлагаю найти число монет мин удельного достоинс…   9.05.2006 2:50
Zxzc   :blink: !!!!!!!!…   9.05.2006 2:51
zZz   по-моему это все то нахождение монеты с наименьшей…   9.05.2006 3:25
Zxzc   А нам это надо? Удельное достоинство изначально п…   9.05.2006 14:31
lapp   [b]А! Я наконец-то понял суть проблемы. Раньш…   10.05.2006 8:18
lapp   Заинтересовала меня эта задачка тоже.. Мужики, вы…   9.05.2006 18:52
Zxzc   Я понял ход твоих мыслей! :yes2: Т.е. если не…   12.05.2006 10:28
lapp   > Я понял ход твоих мыслей! :yes2: > Т…   12.05.2006 10:42
Zxzc   Я сейчас готовлюсь к экзаменам и у меня даже нет в…   13.05.2006 1:52
Zxzc   Внимание! Я достал-таки исходники! 1: con…   13.05.2006 16:10
lapp   Внимание! Я достал-таки исходники! Перво…   13.05.2006 18:12
Zxzc   :yahoo!: Вы-ход-ной! Наконец-то провел все…   14.05.2006 1:41


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 11:44
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name