imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 29.04.2004, 12:22     # 1
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Задачки для программистов

Да... заплесневели вы здесь

Представляю ма-а-аленькие задачки для программистов на сообразительность.

Если никто не решает - правильный ответ через 2 дня.

1) Даны две переменные, ну например a и b. Скажем а = 5, b = 3.
Требуется: поменять местами их значения без объявления третьей (темповой) переменной.

2) Дан одностронний linked list. Требуется развернуть его. Естесственно красиво.

3) Дан вектор. Представте его как queue. Иначе говоря симулируйте очередь с помощью массива.


Приятного голово-ломания
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.

Последний раз редактировалось Programmer; 02.05.2004 в 01:23.
Dimm вне форума  
Старый 29.04.2004, 12:31     # 2
cousin AVI
Guest
 
Сообщения: n/a

и на чем это дело надо реализовывать?кто на чем умеет?
 
Старый 29.04.2004, 12:33     # 3
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Первая решается очень просто:
Код:
b := a + b;
a := b - a;
b := b - a;
И объясни, что есть 'linked list' - никогда с этим не сталкивался, а может и встречался, только называл иначе...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 29.04.2004, 12:37     # 4
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Question

У меня тоже есть задачка на сообразительность: как вычислить максимальное значение целочисленных неотрицательных (типы byte, word) переменных a и b, не используя ветвления и циклов (на паскале)? Т.е. фактически найти max(a, b).
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 29.04.2004 в 12:50. Причина: чертов склероз
Ghost вне форума  
Старый 29.04.2004, 12:38     # 5
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
задача #1:
пусть b>a иначе аналогично
a=(a+b)/2
b=b-a
a=a+b
b=a-2*b

пока набирал уже ответили....

Последний раз редактировалось Gike; 29.04.2004 в 12:41.
Gike вне форума  
Старый 29.04.2004, 12:40     # 6
Merlin Cori
Moderator
 
Аватар для Merlin Cori
 
Регистрация: 29.04.2002
Адрес: Moscow
Пол: Male
Сообщения: 2 980

Merlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБог
Merlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБогMerlin Cori СуперБог
Код:
$a=5;
$b=3;
$a=$a+$b;
$b=$a-$b;
$a=$a-$b;
echo "a= $a  b= $b";
Merlin Cori вне форума  
Старый 29.04.2004, 15:21     # 7
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
cousin AVI
Дело не в языке, а в алгоритме. Можешь вообще на псевдокоде написать.

Ghost
linked list - связанный список. В типичной конфигурации, каждый елемент помимо даты имеет либо 2 указателя (двухсторонний список - prev и next) либо 1 указатель (одностронний список - next)

Gike
А на фига на 2 делить???
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 29.04.2004, 15:30     # 8
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Цитата:
Сообщение от Ghost
У меня тоже есть задачка на сообразительность: как вычислить максимальное значение целочисленных неотрицательных (типы byte, word) переменных a и b, не используя ветвления и циклов (на паскале)? Т.е. фактически найти max(a, b).
А в чём проблема-то?
Возведи 2 в степень sizeof(byte) или sizeof(word) и т.д.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 29.04.2004, 15:30     # 9
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
Цитата:
Сообщение от Programmer
А на фига на 2 делить???
я решал начертив отрезок с координатами a и b
и дальше через середину и длину
a=(a+b)/2 - середина
b=b-a - половина длины
a=a+b
b=a-2*b
Gike вне форума  
Старый 29.04.2004, 15:37     # 10
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Programmer
А-а-а... Тады знаем-с. 2-ая задача (развернуть я так полагаю, преобразовать из 1->2->3 в 3->2->1) тоже решается просто. Писать прогу в ломы поэтому воспльзуюсь разрешением использовать псевдокод.
Короче так. Пусть heap - голова списка, ^.info - поле, ^.next - ссылка на следующий элемент. Тогда:
  1. c := heap; p := nil;
  2. n := c^.next; c^.next := p; p := c; c := n;
  3. если c <> nil, то возвращаемся на пункт (2)
  4. heap := p;
Кажись так...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 29.04.2004, 15:39     # 11
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Programmer
Почитай внимательнее - надо написать прогу, которая выводит максимальное из двух чисел, но при этом не содержит ветвеления и циклов.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 29.04.2004, 15:46     # 12
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
Max=(a+b+|a-b|)/2
Min=(a+b-|a-b|)/2

Последний раз редактировалось Gike; 29.04.2004 в 15:50.
Gike вне форума  
Старый 29.04.2004, 15:58     # 13
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Gike
Молодца. Я первый раз тоже так решил. А теперь тоже самое без использования модуля?...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 29.04.2004, 16:02     # 14
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
Ghost
Max=(a+b+sqrt((a-b)^2)/2
Min=(a+b-sqrt((a-b)^2)/2
Gike вне форума  
Старый 29.04.2004, 16:09     # 15
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Gike
Хитрый. Надеюсь не надо объяснять, что при извлечении корня с последующим возведением в степень не избежать ошибок, т.е. придется еще и извлекать целую часть или округлять - гемор. Чтоб не мучались, вот до чего дошел я:
Код:
c1 := ((1 - (b-a)) * (a xor b)) shr 15;
c2 := 1 - (a-b) shr 15;
max := c2 * a + c1 * b;
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 29.04.2004, 16:27     # 16
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
Цитата:
Сообщение от Ghost
Gike
Хитрый. Надеюсь не надо объяснять, что при извлечении корня с последующим возведением в степень не избежать ошибок....
Это ясно
а на понимание твоего решения у меня явно нехватает знаний
Gike вне форума  
Старый 29.04.2004, 19:02     # 17
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Ghost
Однозначно впереди. Ну а 3-ю задачу?
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 29.04.2004, 19:05     # 18
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Ghost
Только вот решение с модулем гораздо лучше, потому что во 2-ом твоём решении есть маленький недочет: оно работает только для 16-битовых типов. И не будет работать для всех остальных. Так что...
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 29.04.2004, 19:11     # 19
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
А что третью? В моем понимании, вектор - одномерный массив (например, 1::2::3), а преобразовать его надо в списочек: 1->2->3. Это же стандартный алгоритм создания списка с головы (если просматривать массив с первого элемента) или с хвоста (если просматривать массив с конца), который рассказывается в первую очередь при изучении темы "Динамические структуры данных: связные списки". Я это и сам студентам рассказываю. Или я, может, задания не понял?...

По поводу решения без модуля: это действительно только для 16-битных чисел, просто я забыл это указать. Просто как-то раз возникла задача, написать такую прогу. Сперва написал с модулями, а мне говорят, мол, там все равно есть ветвление, хоть его и не видно - при вычислении модуля. Поэтому и придумал такой вот способ, хотя и к нему можно придраться - к сдвигу и xor'у... сказать, дескать, сдвиг на n бит - цикл, исключающее 'или' (т.е. xor) - ветвление.

Кстати, если я не ошибся в своем предположении насчет третьей задачи абзацем выше, то вот код:
Код:
uses
  crt;
type
  List = ^ListItem;
  ListItem = record
    info: integer;
    next: List;
  end;
const
  n = 10;
var
  a:    array [1..n] of integer;
  i:    integer;
  l, p: List;
begin
  clrscr;
  randomize;
  writeln ('vector:');
  for i := 1 to n do begin
    a[i] := random(100);
    write (a[i]:4);
  end;
  writeln;
  l := nil;
  for i := n downto 1 do begin
    new (p);
    p^.info := a[i];
    p^.next := l;
    l := p;
  end;
  writeln('list:');
  p := l;
  while p <> nil do begin
    write (p^.info:4);
    p := p^.next;
  end;
  writeln;
  readkey;
end.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 29.04.2004 в 19:26. Причина: Склероз. Удивляюсь, как я не забыл родиться...
Ghost вне форума  
Старый 29.04.2004, 19:25     # 20
a_ber
Newbie
 
Регистрация: 25.11.2003
Адрес: Near monitor
Сообщения: 49

a_ber Путь к славе только начался
Если хотите то одна из когда-то знаменитых Хайфских задач с курса "Структуры данных"--3й семестр--- ее потом любили на интервью спрашивать:
дан однонаправленный связный список. найти есть ли в нем петля и если есть то где ? (Будет решение может добавлю маленькое усложнение --- пока не буду подсказывать)
a_ber вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:52.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.