![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 04.01.2010
Сообщений: 2
|
![]()
Помогите пожалуйста найти ошибку в коде.
Задача: Задан вес E пустой копилки и вес F копилки с монетами. В копилке могут находиться монеты N видов, для каждого вида известна ценность Pi и вес Wi одной монеты. Найти минимальную и максимальную суммы денег, которые могут находиться в копилке. Ограничения: 1 <= E <= F <= 100, 1 <= N <= 50, 1 <= Pi <= 500, 1 <= Wi <= 100, все числа целые, время 2с. Эта программа работает, но она почему то не ищет максимальную и минимальную сумму program Kopilka; {$APPTYPE CONSOLE} uses SysUtils; Var n:integer; {Количество видов монет} e,f:integer; {Вес пустой копилки и вес копилки с монетами} p,w:array[1..50] of word;{Ценность и вес монет} i,j,l:integer; min,max,m:longint; sum:array[0..100] of longint;{Сумма денег в копилке} lo:array[0..100, 1..50] of byte;{Какие монеты в копилке} wes:integer; Begin {-------------- Ввод данных ---------} Repeat{Проверка – удовлетворяет ли условию задачи} write('Vvedite ves pustoy kopilki(1..100): '); readln(e); write('Vvedite ves kopilki s monetami (1..100): '); readln(f); Until (e >= 1) And (f >= e) And (f <= 100); Repeat{Проверка} write(' Vvedite kolichestvo vidov monet (1..50): '); readln(n); Until (n>=1) And (n<=50); writeln(' Vvedite cennost i ves monet:'); For i:= 1 To n Do{Ввод цены и веса монет} Begin Repeat{Проверка} write('Cena ',i,' moneti: '); readln(p[i]); Until (p[i]>0) And (p[i]<=500); Repeat{Проверка} write('Vec ',i,' moneti: '); readln(W[i]); Until (w[i]>0) And (w[i]<=100); end; {---------- Ввывод на экран введенных данных ---------} writeln('Ves monet v kopilke raven: ',f-e); writeln('Vidy monet kotorie mogut bit v kopilke (nomer, cennost, ves):'); For i:= 1 To n Do{Вывод цены и веса монет} writeln(i,' ',p[i],' ',w[i]); {---------- Поиск минимальной суммы денег ---------} For i:= 0 To f-e Do{"Обнуление" матрицы lo} For j:= 1 To n Do lo[i,j]:= 0; sum[0]:= 0;{Обнуление} For wes:=1 To f-e Do{Заполнение массива sum и матрицы lo} Begin m:= -1;{Минимальная сумма} l:= 0;{Индекс в lo} For i:=1 To n Do{Может ли эта монета «поместиться» в копилку} If wes-w[i] >= 0 Then{При этом может ли копилка быть заполнена до конца} If sum[wes-w[i]] >= 0 Then {Нахождение минимальной суммы} If (m = -1) Or (sum[wes-w[i]]+p[i] < m) Then Begin m:= sum[wes-w[i]] + p[i]; l:= i;{Какую монету взяли} end; If l <> 0 Then{Если поместили монету в копилку} Begin For i:= 1 To n Do lo[wes,i]:= lo[wes-w[l],i];{Заполнение матрицы lo} lo[wes,l]:= lo[wes-w[l],l]+1;{Взяли одну монету данного вида} end; sum[wes]:= m;{Заполнение массива sum} end; min:= sum[wes];{Нашли минимальное значение} If min <> -1 Then{Если копилку можно заполнить, то выводим виды монет} Begin writeln; writeln(' Zapolnenie monetami kopilki (summa minimalna):'); For i:= 1 To n Do writeln(i,' -i vid monet: ',lo[wes,i]); end; {---------- Поиск максимальной суммы денег ---------} {-- Аналогично поиску минимальной суммы денег ---} For i:= 0 To f-e Do For j:= 1 To n Do lo[i,j]:= 0; sum[0]:= 0; For wes:=1 To f-e Do Begin m:= -1; l:= 0; For i:=1 To n Do If wes-w[i] >= 0 Then If sum[wes-w[i]] >= 0 Then {Отличие от поиска минимальной суммы денег} If sum[wes-w[i]]+p[i] > m Then Begin m:= sum[wes-w[i]] + p[i]; l:= i; end; If l <> 0 Then Begin For i:= 1 To n Do lo[wes,i]:= lo[wes-w[l],i]; lo[wes,l]:= lo[wes-w[l],l]+1; end; sum[wes]:= m; end; max:= sum[wes]; If min <> -1 Then Begin writeln; writeln(' Zapolnenie monetami kopilki (summa maksimalna):'); For i:= 1 To n Do writeln(i,' -i vid monet: ',lo[wes,i]); end; writeln; {-- Вывод минимальной и максимальной суммы денег --} If (min = -1) Or (max = -1) Then {Проверка - заполнена ли копилка} writeln('Невозможно заполнить копилку!!') else Begin writeln(min,' - minimalnaya summa deneg v kopilke'); writeln(max,' - maxsimalnaya summa deneg v kopilke'); end; readln; End. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 19.09.2009
Сообщений: 166
|
![]()
Блин, в чужих кодах порой труднее разобраться, чем написать собственную программу ) Щас в общем постараюсь найти ошибку и отпишусь
|
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 19.09.2009
Сообщений: 166
|
![]() Цитата:
У меня все нашло с твоим кодом (компилировал в паскале) и насколько я посмотрел правильно, вот взгляни : |
|
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 04.01.2010
Сообщений: 2
|
![]()
а у меня почему то в делфи7 не ищет максимального и минимального, одни 0 выдает
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите пожалуйста доделать програму в делфи! | doodlezD | Помощь студентам | 3 | 19.06.2009 22:14 |
Помогите пожалуйста с кодом | inwc | Помощь студентам | 3 | 20.05.2009 14:17 |
Помогите, пожалуйста, с кодом С++ | Serammy | Помощь студентам | 1 | 07.05.2009 19:43 |
Делфи Консоль ПОмогите пожалуйста | LLIypLLIyH | Помощь студентам | 8 | 10.06.2008 21:10 |