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

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

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

 
 Ответить  Открыть новую тему 
> Копилка
сообщение
Сообщение #1


Гость






Слёзно прошу, помогите мне пожалуйста решить задачу в Паскале. Сама я не могу в ней разобраться, а уже скоро надо её отдать преподавателю!

Пожалуйста, решите ! текст программы выложите сюда!
Заранее благодарна!

Копилка
Заданы вес Е пустой копилки и вес F копилки с монетами. В копилке могут находиться монеты N видов; известны ценность Pi каждого вида монет и вес Wi одной монеты. Найти минимальную и максимальную суммы денег, которые могут находиться в копилке.
Ограничения:
1 < E < F < 10000, 1 < N < 500, 1 < Рi < 50000, 1 < Wi < 10000,
все числа целые, время 2 с.

Ввод из файла piggy.in. В первой строке находятся числа Е и F, во второй - число N, в следующих N строках - по два числа, Рi и Wi.

Вывод в файл piggy.out. Выводятся два числа через пробел - минимальная и максимальная суммы. Если копилка не может иметь точно заданный вес при условии, что она наполнена монетам заданных видов, - вывести This is impossible...

Примеры
Цитата
Ввод 1
1000 1100
2
1 1
5 2
Вывод 1
100 250


Ввод 2
1000 1010
2
6 3
2 2
Вывод 2
10 16


Ввод 3
1000 2000
1
10 3
Вывод 3
This is impossible


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

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

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


Цитата
Ввод 2
1000 1010
2
6 3
2 2
Вывод 2
10 16


тут ошибка ибо 1010-1000 = 10

один вид монет : стоимость 6, вес - 3 -> 10 div 3 = 3, 3*6 = 18
получается максимум 18 а не 16

вот что получилось такая вещь, я не уверен что это точно правильно, но идее решения мне кажется верна, пока версия без файла, да и еще не знаю как сделать проверку на This is impossible... Так что вводить данные надо по аккуратней ) попозже постараюсь доделать/переделать, а пока вот :

uses crt;
type

TRubl = record
p,w : word;
end;

TMoney = array[1..20] of TRubl;
var
empty, full, n , m, _min, _max: integer;
money : TMoney;

procedure Input(var x : TMoney; size : byte);
var
i : byte;
begin
for i := 1 to size do begin
write('p[',i,']=');
readln(x[i].p);
write('w[',i,']=');
readln(x[i].w);
end;
end;

procedure Sort(var x : TMoney; size : byte);
var
i : byte;
flag : boolean;
temp : TRubl;
begin
repeat
flag := true;
for i := 1 to size - 1 do
if not(x[i].p<=x[i+1].p) then begin
flag := false;
temp := x[i];
x[i] := x[i+1];
x[i+1] := temp;
end;
until flag;
end;

procedure GetMinMax(x : TMoney; size,mass : integer; var max, min : integer);
var
i,j,tempM : byte;
sum : word;
begin

max := 0;
min := maxint;

tempM := mass;

j := size + 1;

repeat

dec(j);

sum := 0;

mass := tempM;

for i := j downto 1 do begin
inc(sum, x[i].p * (mass div x[i].w));
dec(mass, (mass div x[i].w) * x[i].w);
end;

if sum>max then max := sum;
if sum<min then min := sum;

until j=1;


end;

begin

clrscr;

write('Вес пустой копилки : '); readln(empty);
write('Вес копилки с монетакм : '); readln(full);
write('Введите кол-во монет : '); readln(n);

m := full - empty;

Input(money, n);

Sort(money ,n);

GetMinMax(money, n, m, _max, _min);

writeln(_max);
writeln(_min);

readln
end.



--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






To: klem4
я знак ошибочно не тот поставила! извиняюсь!

везде где "<" должно быть "≤"
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






please
помогите доделать программу klem4'a

пожалуйста ! wub.gif wub.gif wub.gif wub.gif wub.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

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

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


klem ,если сортировать ,то сортировать по отношению цена/вес ,а не просто по цене.

program kopilka;
var v,vk,n,i,j : longint;
b : array[1..100,1..2]of longint;
a : array[0..10000]of longint;

procedure init;
begin
read(vk,v,n);
for i := 1 to n do
read(b[i,1],b[i,2]);
end;

function min(a,b : longint):longint;
begin
if a < b then min := a else min := b;
end;

procedure solve;
begin
v := v - vk;
a[0] := 0;
for i := 1 to v do a[i] := maxlongint - 50001;
for i := 1 to n do
for j := 0 to v do
if j + b[i,2] <= v then
a[j + b[i,2]] := min(a[j + b[i,2]],a[j] + b[i,1]);
end;

procedure out;
begin
if a[v] = maxlongint - 50001 then write('no')
else writeln(a[v]);
end;

begin
init;
solve;
out;
end.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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