Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2011, 14:47   #1
Старый Gilbert
 
Регистрация: 20.03.2011
Сообщений: 4
По умолчанию Задача на паскале (набрать заданную сумму денег)

Здравствуйте. помогите решить задачу на паскале.
Заданы количества монет достоинством 1,2,3,4,5,10 рублей. Можно ли из этих монет набрать заданную сумму. Если да, то указать как это сделать.
Начало сделал и то наверно не правильно...\
program zadacha;
uses crt;
var a,b,,kol,sum : integer;
begin
clrscr;
sum:=0;
kol:=0;
writeln ('Введите количества монет');
readln (a) ;
writeln ('Введите нужную сумму');
readln (b) ;
Старый Gilbert вне форума Ответить с цитированием
Старый 20.03.2011, 15:14   #2
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Раскладываем заданную сумму, на все возможные суммы и проверяем на входимость
Код:
type
    mass=array[byte] of longint;
procedure summ(var x:mass;var l:integer);
var s,j,i:integer;
begin
     i:=l-1;
     s:=x[l];
     while (i>1)and(x[i-1]<x[i]) do
     begin
          s:=s+x[i];
          i:=i-1;
     end;
     x[i]:=x[i]+1;
     l:=s+i-1;
            for j:=i+1 to l do
            x[j]:=1;
end;
var a:mass;n,i,j,l:integer;
f:boolean;
begin
     readln(n);
     for i:=1 to n do
     begin
          a[i]:=1;
          write(a[i],' ');
     end;
     l:=n;
     writeln;
     repeat
           summ(a,l);
           f:=true;
           for i:=1 to l do
              if not(a[i]  in [0..5,10]) then f :=false;
           if f then
               for i:=1 to l do
               write(a[i],' ');
           writeln;
     until l=1;
  readln;
end.

Последний раз редактировалось Летучий_СкилетиК; 21.03.2011 в 13:39.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 21.03.2011, 13:30   #3
Старый Gilbert
 
Регистрация: 20.03.2011
Сообщений: 4
По умолчанию

спасибо =) а без процедур никак да?
Старый Gilbert вне форума Ответить с цитированием
Старый 21.03.2011, 13:47   #4
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Старый Gilbert Посмотреть сообщение
спасибо =) а без процедур никак да?
а разница какая?, да никакой просто без процедуры код становиться громоздким и не читаемым
Код:
    var N,i,L,s,j:byte;
       	X:array [byte] of byte;
        g : boolean;

begin
    readln(N);
    L:=N;
    for i:=1 to L do
    begin
       X[i]:=1;
       write(x[i],' ');
    end;
    writeln;
    repeat
      i:=L-1;s:=X[L];
      while (i>1)and(X[i-1]<=X[i]) do
      begin
          s:=s+X[i];
          dec(i)
      end;
      inc(X[i]);
      L:=i+s-1;
           for j:=i+1 to L do
              X[j]:=1;
      g := true;
      for i:=1 to L do
      if not( x [i] in [1..5,9])then g := false;
      if (g) then
      begin
          for i:=1 to L do
          write(X[i]);
          writeln;
      end;
    until L=1;
    readln
end.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 21.03.2011, 15:12   #5
Старый Gilbert
 
Регистрация: 20.03.2011
Сообщений: 4
По умолчанию

зацикливание происходит
Старый Gilbert вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти всевозможные комбинации значений переменных точно дающих заданную сумму timezero Паскаль, Turbo Pascal, PascalABC.NET 14 04.02.2011 07:59
Жадный алгоритм. Задача о размене денег. Multiman Помощь студентам 4 18.10.2010 13:15
Помогите найти алгебрасическую сумму!на паскале vdv08 Помощь студентам 4 07.11.2008 00:19
Пожалуйста, требуется подсказка!!! Как изменить сумму денег в копейках на рубли во всем столбце???? yur4eG Microsoft Office Excel 2 05.05.2008 18:52