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

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

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

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


Пионер
**

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

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


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

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


Пионер
**

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

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


no1.gif , рекурсия не причем.
Вот моё, абсолютно не массовое, решение:
Пусть имеются три вида монет массами m1, m2 и m3 и достоинством d1,d2,d3.
MaxAvail - "максимальное число переборов" - найдем по формуле (P/Вес самой дешевой).
P - вес монет, S - стоимость товара.
Тогда все сводится к

For i:=1 to MaxAvail do
For j:=1 to MaxAvail do
For k:=1 to MaxAvail do
If m1*i+m2*j+m3*k = P then
If d1**i+d2*j+d3*k<S then
begin
Write('Может не хватить!');
readln;
exit;
end;
Write('Разбивай');
end.


Но это решение не верно т.к.
1. Число разновидностей не известно заранее.
2. Если бы меньшей монете соответствовал меньший вес, то задача решалась бы в 2 строчки:
If P/Massa_min>S/Dostoinstvo_min then Write('Может не хватить!')
Else Write('Разбивай');


Может мы что-то сможем получить, развивая второе рассуждение... dry.gif

P.S. На дискете у меня есть 2 варианта решения препода. Но вот незадача: "DISK NOT FORMATED. DO YOU WANT FORMAT IT NOW?" Если у меня получится таки достать файлы с исходниками я сразу же их выложу. А иначе до конца выходных...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.05.2006 23:39
Сообщение #3


Гость






Цитата(Zxzc @ 7.05.2006 22:51)
no1.gif , рекурсия не причем.

Уверен? Я - нет... Смотри сюда (если твое, "не массовое решение", верно):
const
max_size = 100; { Работаем до 100 разных номиналов максимум }

type
arrType = array[1 .. max_size] of integer;

var
m, d: arrType;
coin_count, MaxAvail: integer;

P, s: integer;


procedure check(level: integer; var a: arrType);
var i, j, s_m, s_d: integer;
begin
if level > coin_count then exit
else
if level = coin_count then
for i := 1 to MaxAvail do begin
a[level] := i;
s_m := 0; s_d := 0;
for j := 1 to level do begin
s_m := s_m + m[j] * a[j];
s_d := s_d + d[j] * a[j];
end;
if (s_m = P) and (s_d < s) then begin
writeln('not enough possibly...');
readln; halt;
end

(*
{ Checking }
for j := 1 to level do
write(a[j]:4);
writeln;
*)

end

else
for i := 1 to MaxAvail do begin
a[level] := i;
check(succ(level), a); { Я тебе обещал рекурсию? }
end;
end;


var
counters: arrType;

begin
MaxAvail := 3; { Считай по своей формуле }

coin_count := 3;
{
+ заполни массивы m, d нужными значениями,
и в coin_count занеси КОЛИЧЕСТВО монет
}

check(1, counters);
Writeln('Do it !!!');

end.
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 5.07.2025 0:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"