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

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


Центр информационных технологий ИРО

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

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

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

Разбор задания занятия № 1 (22 сентября 2008 года)

 

Задание на сайте в указанное время сдали 24 человека. Их результаты приведены в таблице:

 

Дата

Автор

Язык

Время

Память

1

22.09.2008 17:18:39

Taras Zubyk

Pascal

0,007

816 Кб

2

22.09.2008 17:55:33

Козачук Андрей

C++

0,025

720 Кб

3

22.09.2008 17:59:33

Чудов Алексей Евгеньевич

C++

0,021

692 Кб

4

22.09.2008 18:35:19

Непомнящий Григорий Исаакович

Pascal

0,007

828 Кб

5

23.09.2008 20:39:50

Петров Иван Васильевич

C++

0,022

704 Кб

6

24.09.2008 1:02:22

Andrei Avanessov

C++

0,022

596 Кб

7

24.09.2008 12:31:49

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

Pascal

0,008

816 Кб

8

24.09.2008 17:58:29

Левкевич Вероника Игоревна

Pascal

0,007

840 Кб

9

24.09.2008 22:12:55

Календо Дима

Pascal

0,006

828 Кб

10

25.09.2008 12:57:55

Баширов Ренат Маратович

Pascal

0,029

1364 Кб

11

26.09.2008 18:33:37

Дядьков Ярослав Сергеевич

Pascal

0,007

844 Кб

12

27.09.2008 11:18:01

Калмыков В.В

Pascal

0,007

864 Кб

13

27.09.2008 21:15:35

Шишкин Андрей Алексеевич

Pascal

0,007

824 Кб

14

27.09.2008 21:45:22

Bazyk Artem Ur'evich

Pascal

0,009

824 Кб

15

28.09.2008 4:20:19

Муравьев Руслан Владимирович

Pascal

0,007

812 Кб

16

28.09.2008 10:42:15

Подоксёнов Сергей Владимирович

Pascal

0,029

1372 Кб

17

28.09.2008 10:54:34

Игорь Андрианов

C++

0,027

720 Кб

18

28.09.2008 16:09:54

Адуенко Александр Александрович

Pascal

0,007

832 Кб

19

28.09.2008 17:04:55

Ермилов Ярослав

Pascal

0,006

848 Кб

20

28.09.2008 18:38:15

Мухаметьянов Денис Ильдарович

Pascal

0,027

860 Кб

21

28.09.2008 21:25:31

Васюк Илья Викторович

Pascal

0,007

832 Кб

22

28.09.2008 23:10:21

Муратов С. А.

C++

0,038

672 Кб

23

29.09.2008 11:23:00

Граблева Анастасия Сергеевна

Pascal

0,007

844 Кб

24

29.09.2008 11:38:19

Павел Некрасов

Pascal

0,007

844 Кб

 

Шестнадцать участников проекта прислали свои программы, в 10 присланных работах имелось описание алгоритма. Далее привожу авторское решение задачи.

Найдем двоичное разложение заданного числа. Просматривая его слева направо, пропускаем нули, первую единицу заменяем нулем, также далее следующую группу единиц заменяем нулями, подсчитывая количество таких замен, первый встретившийся ноль заменяем на единицу, справа дописываем подсчитанное количество единиц. Особо следует рассмотреть правую границу указанного диапазона значений, так как следующее для неё значение равно 231, что выходит за границы диапазона longint.

Программа

var

  n : longint;

  i, k, j : integer;

  a : array [1..32] of integer;

begin

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

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

  read(n); k:=0;

  while n>0 do

  begin k:=k+1; a[k]:=n mod 2; n:=n div 2 end;

  i:=1; while a[i]=0 do i:=i+1;

  a[i]:=0; i:=i+1; j:=0;

  while a[i]=1 do begin a[i]:=0; i:=i+1; j:=j+1 end;

  a[i]:=1; if i>k then k:=i;

  for i:=1 to j do a[i]:=1;

  if k=32 then write('2147483648') else

  begin

    for i:=k downto 1 do n:=n*2+a[i];

    write(n)

  end

end.

.

 

 

Ведущий проекта, к.п.н., доцент

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

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

 



В избранное