Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Неформализованная задача Pascal

12K
27 октября 2007 года
Asu2007
41 / / 19.09.2007
Заданы три натуральных числа A, B и N. Найти все натуральные числа, не превосходящие N, которые можно представить в виде суммы (произвольного числа) слагаемых, каждое из которых- А или В.
268
27 октября 2007 года
Михаил
587 / / 25.06.2005
вычитать из числа одно слагаемое и смотреть делится ли разность на второе без остатка и так до тех пор пока разность не станет меньше 0 или меньше 2 слагаемого
12K
28 октября 2007 года
Asu2007
41 / / 19.09.2007
Код:
var
A,B,N: integer;
c,d: real;
begin
write('a=');
readln(a);
write('b=');
readln(b);
write('n=');
readln(n);
if n>a  then
begin
c:=n-a;
for b:=a to n do
d:=b/2;
write('d=',d:2:2);
readln;
end;
end.
12K
28 октября 2007 года
Asu2007
41 / / 19.09.2007
Вот так что ли:
Код:
var
A,B,N: integer;
c,d: real;
begin
write('a=');
readln(a);
write('b=');
readln(b);
write('n=');
readln(n);
if n>a  then
begin
c:=n-a;
for b:=a to n do
d:=b/2;
write('d=',d:2:2);
readln;
end;
end.
274
28 октября 2007 года
Lone Wolf
1.3K / / 26.11.2006
непохоже... тебе нужын натуральные числа, а не вещественные.

паскаль лень было вспоминать, набросал на СИ. думаю идея будет понятна.
Конечно этот код далеко не оптимален и не красивый...
Код:
#include <conio.h>
#include <stdio.h>

int trySub(int i,int a,int b) {
    int res;
    res=0;
    if(i==0)
      return 1;
    if(a<=i)
      res=trySub(i-a,a,b);
    if((b<=i)&&(res==0))
      res=trySub(i-b,a,b);
    return res;
}

int main() {
 int a=5,b=7,n=50,i;
 clrscr();
 for(i=1;i<n;i++)
   if(trySub(i,a,b))
      printf("%d\n",i);

 return 0;
}

[COLOR="Red"]При чем тут С ? Речь идет о Pascal.Отвечаем только по существу.[/COLOR]модератор.
12K
28 октября 2007 года
Asu2007
41 / / 19.09.2007
Я вопще Си не знаю. можно хоть описать как выполняется подпрограмма
274
28 октября 2007 года
Lone Wolf
1.3K / / 26.11.2006
описана функция trySub(i,a,b) i - некое целое число, a и b - наши числа. алгоритм функции:
1. Если i=0,то заканчиваем выполнение и возвращаем true
2. Если i<a, вызывем саму себя trySub(i-a,a,b).
3 Если i<b и на шаге 2, функция вернула false вызываем trySub(i-b,a,b)
4. Возвращаем резултат, если на шагах 2 и 3 вернулса false его возвращаем, если же где-то true, то возвращаем true.

в основной программе перебераем все натуральные числа, и заганяем в выше описаную функцию.
и так мы рекурсивно попытаемся разложить каждую цифру на составляющее.
12K
29 октября 2007 года
Asu2007
41 / / 19.09.2007
Че та не понял. А как будет выгледит математическая модель
12K
31 октября 2007 года
Asu2007
41 / / 19.09.2007
Вот так получается:

Код:
var A,B,N,i,iA:word;
begin
A:=5;b:=3;N:=11;
for i:=1 to N do
begin
for iA:=0 to i div A do
 If (I-Ia*A)mod B=0  then
 begin
 writeln(i);
 Break;
 end;
end;
readln;
end.
276
31 октября 2007 года
Rebbit
1.1K / / 01.08.2005
Блин. Смотреть на ето больно. Ето ж класика. Метод склейки (описан в книге Мухачевой по роскрою, иногда называют методом наполнения рюкзака но тут конфлик. Про рюкзак есть две задачи одна с наполнением сипучими веществами, вторая - та что нам нужно про наполнение предметами конкретного розмера но в неограниченом количестве).
Ничего отнимать и делить не надо. тут простая динамика. Припустим можно сделать масив розмером N елементов. Изначально они нулевые.
Елементы с индексами А и B устанавливаем в 1.
Бежым по масиву и иля каждого индекса I в котором ненулевое значение устанавляваем елементы с индексами I+A, I+B в единицу, бежым дальше. Если такой масив сделать нельзя используем список.

Код:
var
   a, b, n, i: word;
   arr: array[0..60000] of byte;

BEGIN
  readln(a,b,n);
  arr[a] := 1;
  arr := 1;
  for i := 1 to n do
  begin
    if (arr = 1) then
    begin
      writeln(i);
      arr[i+a] := 1;
      arr[i+b] := 1;
    end;
  end;
END.
Вот маленький код без проверок на ошибки и с ограничениями на числа. Косметику сам делай.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог