Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Задача в неделю. Олимпиадные задачи по информатике Разбор задания 5-го занятия


Информационный Канал Subscribe.Ru

Югорский НИИ информационных технологий

Югорский государственный университет

Телекоммуникационный проект "Задача в неделю"

Разбор задания занятия № 5

 

Заметим, что Sn=1/(1*2)+2/(1*2*3)+3/(1*2*3*4)+:+(n-1)/(1*2*3*:*n)=(n!-1)/n!=1-1/n!. Достаточно найти k-ую цифру 1/n! (k1), тогда k-ая цифра числа 1-1/n! равна 9-k1. Исключением является случай n=2, т.к. тогда Sn=1/2=0.5 и k-ая цифра 10-k1.

Чтобы найти 1/n! можно делить 1 на все числа от 2 до n. Но, если первые k цифр стали нулевыми, производить деление дальше не имеет смысла. В этом случае ответ 9.

Рассмотренный алгоритм реализован в следующей программе

var

  a : array [1..5500] of byte;

  c, i, j, k, n : longint;

  ok : boolean;

begin

  assign(input,'input.txt'); reset(input);

  assign(output,output.txt); rewrite(output);

  read(n,k);

  c:=1;

  ok:=true;

  i:=2;

  while (i<=n) and ok do

  begin

    ok:=false;

    for j:=1 to k+1 do

    begin

      c:=c*10+a[j];

      a[j]:=c div i;

      c:=c mod i;

      if a[j]<>0 then ok:=true

    end;

    c:=0;

    i:=i+1

  end;

  if ok then if n=2 then write ((10-a[k]) mod 10)

                    else write (9-a[k])

        else write (9)

end.

 

Алгоритм и программа предложены участницей проекта Чеботаревой Юлией из Брянска.

Работы тестировались на компьютере Celeron 1000 MHz на 20 тестах. Эти тесты можно взять на сайте проекта.

 

Ведущий проекта, кандидат педагогических наук

Александр Владимирович Алексеев,

e-mail - aav@uriit.ru, internet - http://attend.to/zvn, http://zvn.uriit.ru.


//

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: job.education.zvn
Отписаться

В избранное