Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 27
1

Написать алгоритм выплаты заданной суммы S минимальным количеством купюp достоинством M(1), ..., M(N)

19.11.2014, 19:49. Просмотров 863. Ответов 4
Метки нет (Все метки)

Сделала вроде все правильно, но программа не работает, можете помочь найти ошибку?

Задан массив М[1:N] натуральных чисел, упорядоченный по неубыванию, т.е.: M[1]<=M[2]<=...<=M[N].
Написать алгоритм выплаты заданной суммы S минимальным количеством купюp достоинством M(1), ..., M(N).

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const
 N = 13;
var
  Form2: TForm2;
  money: array[1..N] of cardinal;
implementation
 
uses UnitZadanie1;
 
{$R *.dfm}
procedure Uniterms;
begin
//Возможные купюры денег
money[1]:=1;
money[2]:=2;
money[3]:=5;
money[4]:=10;
money[5]:=20;
money[6]:=50;
money[7]:=100;
money[8]:=200;
money[9]:=500;
money[10]:=1000;
money[11]:=2000;
money[12]:=5000;
money[13]:=10000;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Form2.Hide;
Form1.Show;
end;
 
procedure TForm2.CalculateButtonClick(Sender: TObject);
var
      i,k: byte;
    sum: integer;
 chislo: cardinal;
HowMuch: byte;
    ost,ost1: byte;
    st: string;
begin
Memo1.Clear;
 
howmuch:=0;
st:='';
ost:=0;
chislo:=StrToInt(Edit1.Text);
k:=1;
For k:=1 to N-1 do
 begin
  if (chislo>money[k]) and (chislo<money[k+1]) then
   begin
    ost:=chislo-money[k];
    Memo1.Lines.Add(IntToStr(chislo));
    Memo1.Lines.Add('1 - '+IntToSTr(money[k]));
    continue;
   end;
 end;
 
{if chislo > 10000 then
 begin
 ost:=(chislo mod 10000)
  if ost<>0 then
   begin
    HowMuch:=1;
    st:=st+IntToStr(HowMuch)+IntToStr(money[13]);
    ost1:=ost mod 1000;
   //else
     if ost1<>0
 
 end; }
Edit1.Clear;
Edit1.SetFocus;
end;
 
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;
end;
 
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 case Key of
  '0'..'9':  ;
  #8:        ;
  #13: CalculateButton.Click;
  else Key:=Chr(0);
  end;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2014, 19:49
Ответы с готовыми решениями:

Написать алгоритм выплаты заданной суммы S минимальным количеством купюр
задан массив М натуральных чисел, упорядоченный по неубыванию, т.е. М&lt;=M&lt;=....&lt;=M. написать...

Способы выплаты суммы n с помощью монет достоинством 1,2,5,10 рублей
нужно составить програлу в делфи. в консольном окне. получить все способы выплаты суммы n с...

Все способы выплаты суммы n с помощью купюр достоинством 1, 5, 10, 20 и 100 долларов
Здравствуйте помогите пожалуйста решить следующую задачу. Ввести с клавиатуры натуральное число n....

Определить число способов выплаты суммы n руб. с помощью монет достоинством 1, 2, 5 рублей
22. Дано натуральное число n(n&lt;100). a) Определить число способов выплаты суммы n руб. с помощью...

4
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 27
19.11.2014, 20:02  [ТС] 2
вот собственно и прога
0
Вложения
Тип файла: rar Лаб 4.rar (1.22 Мб, 12 просмотров)
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 27
20.11.2014, 08:28  [ТС] 3
эхх неужели никто не знает? Господа программисты!
0
2505 / 1126 / 582
Регистрация: 07.06.2014
Сообщений: 3,278
20.11.2014, 11:33 4
Цитата Сообщение от Bebebe Посмотреть сообщение
эхх неужели никто не знает? Господа программисты!
задачка далеко не так проста, как может показаться на первый взгляд.

цитирую, например, обсуждение c одного из форумов:
2Влад
Набор купюр далеко не всегда будет таким, как советский. К примеру у тебя есть купюры 25, 10 и 1. Сумму ты хочешь сложить 30. Твоим методом будет 25+1+1+1+1+1, т.е. 6 купюр. А оптимально 10+10+10, т.е. 3 купюры. Вообще эта штука решается либо рекурсией с бэктрекингом(рекурсивно перебираем все возможные комбинации, с оптимизацией, ессно, т.е. проверяем пока сумма меньше заданой и количество купюр меньше найденного ранее минимального)
либо с помощью динамики(строим масив, в котором индекс отвечает значению суммы, а значение количеству купюр). К примеру, для купюр 1, 2, 5 массив будет иметь вид:
1 1 2 2 1 2 2 3 ...
Сначала заполняем его как 1 2 3 4 5...(при условии, что есть купюра достоинством 1). Потом добавляем остальные купюры. К примеру, добавив "2", получим
1 1 2 3 3 4...
Т. е., от элемента с индексом (i) отнимаем значение (i div x), где (х) - значение купюры, которую мы добавляем в набор(это если (i) нацело не делится на (x)), если делится, то тупо пишем туда (i/x). Если а[i]<(i - (i div x)), то ничего менять не надо. В общем, что то такое, точно не помню. Дельфи не знаю, так что писать ниче не буду =)

ЗЫ Вроде должно работать =) Я когдато ее рекурсией решал, но так должно бы тоже заработать.

описание решения есть на Алголисте (см. algolist ). Найте легко. погуглите
Задан массив натуральных чисел, упорядоченный по неубыванию, алгоритм выплаты заданной суммы S минимальным количеством купюp
первым в поиской выдаче и будет искомое..

Но, скажу честно, я в представленном на алголисте алгоритме решения не до конца разобрался, я бы через рекурсию пытался решить...
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 27
28.11.2014, 19:06  [ТС] 5
help help!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2014, 19:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Циклы: определить все способы выплаты суммы n с помощью купюр достоинством 1, 5, 10, 20 и 100 условных единиц
Ввести с клавиатуры натуральное число n. Определить все способы выплаты суммы n с помощью купюр...

Реализовать выдачу заданной суммы денег минимальным количеством купюр
В массиве К в порядке уменьшения представлены денежные знаки разной стоимости. Реализовать выдачу в...

Реализовать выдачу в этой системе заданной суммы m минимальным количеством купюр
В массиве K (n) в порядке убывания представлены денежные знаки разного достоинства. Реализовать...

Написать жадный алгоритм формирования сдачи с 1 рубля минимальным количеством монет при покупки товара ценой X копеек
Раньше были монеты достоинством 1, 2, 3, 5, 10, 15, 20 и 50 копеек. Написать жадный алгоритм...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.