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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 01:53   #1
firephenix
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 89
По умолчанию Возможные комбинации

Методист по информатике О.Г. живет на N-ом этаже 9-этажного дома с лифтом, который может останавливаться на каждом этаже. Между соседними этажами дома имеется лестница из 2-х пролетов, разделенных площадкой, по К ступенек в каждом пролете. Сколькими способами О.Г. может подняться на свой этаж, если поднимаясь по лестнице можно становиться на следующую ступеньку или через одну ступеньку ?
Ввод
N K
где N, K - натуральные (N<=9, K<=15)
Вывод
S - число способов
Пимер ввода:
6 14
Пример вывода:
7133524970800529778695960501

Вот моё решение, но в нём где-то ошибка, помогите её найти
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i,j,n,k,v,res : longint;
  p : array[1..10] of extended;
  s : array[1..10] of string;
  s1 : widestring;

procedure FindAll(kol : longint);
begin
  if kol>1
    then
      begin
        FindAll(kol-2);
        FindAll(kol-1);
      end
    else if kol>0 then FindAll(kol-1)
                  else Inc(v);
end;

begin
  readln(n,k);
  v:=0;
  FindAll(k);
  res:=v*v;
  fillchar(p,sizeof(p),0);
  p[1]:=1;
  for i:=1 to n-1 do
    begin
      p[i+1]:=p[i+1]+p[i]*res;
      for j:=i+1 to n do p[j]:=p[j]+p[i];
    end;
  writeln(p[n]:0:0);
  readln(n);
end.
firephenix вне форума Ответить с цитированием
Старый 01.04.2011, 02:19   #2
firephenix
Пользователь
 
Регистрация: 14.02.2011
Сообщений: 89
По умолчанию

Эврика, я понял свою ошибку!!!!!
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i,j,n,k,v,res : longint;
  p : array[1..10] of extended;

procedure FindAll(kol : longint);
begin
  if kol>1
    then
      begin
        FindAll(kol-2);
        FindAll(kol-1);
      end
    else if kol>0 then FindAll(kol-1)
                  else Inc(v);
end;

begin
  readln(n,k);
  v:=0;
  FindAll(k);
  res:=v*v;
  fillchar(p,sizeof(p),0);
  p[1]:=1;
  for i:=1 to n-1 do p[i+1]:=p[i+1]+p[i]*res+p[i];
  writeln(p[n]:0:0);
  readln(n);
end.
Но тут возникла другаю проблема, Extended может хранить только числа с точностью 20 знаков (диопазон ментисы), а требуемый ответ использует куда больший диопазон. Может кто знает как это обойти?
firephenix вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможные комбинации из чисел Serg1k Microsoft Office Excel 17 17.12.2021 13:27
Даны цифры от 1 до 38 нужно составить все возможные комбинации из 6 чисел без повторений. gector Фриланс 14 01.04.2013 20:20
все возможные числа nick_5714 Помощь студентам 7 16.02.2011 15:41
Все возможные варианты строки Vikenty Общие вопросы Delphi 3 29.08.2010 03:30
Все возможные слагаемые anGeee Паскаль, Turbo Pascal, PascalABC.NET 4 04.12.2008 20:22