Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Гениальная задача   Найти похожие ветки 

 
GeLLeR ©   (2006-10-12 18:20) [0]

На олимпиаде 11 класса по инф-ке. Хотя задача для 5-го класса:

Обменять две числовые переменные не вводя третью. Думал минут 10!!! Позор...


 
Стаффаж ©   (2006-10-12 18:22) [1]

Классика


 
oldman ©   (2006-10-12 18:23) [2]

В условии числовые не обязательно. Хотя, это уже для 6 класса. :)


 
Думкин ©   (2006-10-12 18:27) [3]

> GeLLeR ©   (12.10.06 18:20)  

А у вас есть полный ответ, например, для Паскаля?


 
Gero ©   (2006-10-12 18:27) [4]

И как решил?


 
GeLLeR ©   (2006-10-12 18:28) [5]

A=5
B=6
A=A+B
B=A-B
A=A-B


 
ANB ©   (2006-10-12 18:28) [6]

во млин. а я не умею. так правильно ?

x := x + y;
y := x - y;
x := x - y;


 
ANB ©   (2006-10-12 18:30) [7]

а на асме можно одним оператором, вроде как. что то вроде XCHNG


 
GeLLeR ©   (2006-10-12 18:30) [8]

ANB ©   (12.10.06 18:28) [6]

Забыл смайлик???


 
Zeqfreed ©   (2006-10-12 18:33) [9]

xor"ом интересней.


 
jack128 ©   (2006-10-12 18:33) [10]

а для НЕчисловых (см [2] ) как???


 
Gero ©   (2006-10-12 18:34) [11]

> [9] Zeqfreed ©   (12.10.06 18:33)

Конечно, и защищиет от выхода за границы диапазона.


 
Zeqfreed ©   (2006-10-12 18:35) [12]

> [11] Gero ©   (12.10.06 18:34)

Именно.


 
Zeqfreed ©   (2006-10-12 18:38) [13]

> [10] jack128 ©   (12.10.06 18:33)

Может быть имеется в виду то, что можно проксорить любую произвольную область памяти?


 
ANB ©   (2006-10-12 18:40) [14]


> GeLLeR ©   (12.10.06 18:30) [8]

не. не забыл. тока сейчас дотумкал, да уже решение опубликовалию всегда менял через третью.

Кстати, а как корректно строки разного размера поменять ?


 
Думкин ©   (2006-10-12 18:40) [15]


> GeLLeR ©   (12.10.06 18:28) [5]
> A=5
> B=6
> A=A+B
> B=A-B
> A=A-B

var A,B : byte;
a:=100;
b:=200;


 
oldman ©   (2006-10-12 18:40) [16]


> jack128 ©   (12.10.06 18:33) [10]
> а для НЕчисловых (см [2] ) как???


a:="Сам дурак"
b:="От такого слышу"
вспоминаем  Clipper
a:=a+b
b:=substr(a,1,len(a)-len(b))
a:=substr(a,len(a)-len(b)+1,len(a)-len(b))

Переводим на дельфи :)))


 
default ©   (2006-10-12 18:44) [17]

на олимпиады такие баяны кидают, ужас


 
jack128 ©   (2006-10-12 18:49) [18]

oldman ©   (12.10.06 18:40) [16]
Ну понятно. Работает для всех типов, для которых определены операции сложения и вычитания.


 
default ©   (2006-10-12 18:50) [19]

а кроме +/- и xor кто-нибудт может предложить?


 
McSimm ©   (2006-10-12 18:51) [20]

я тут наваял вариант, без риска переполнения:
$x ^= $y ^= $x ^= $y;

Сорри, не паскаль малость :)


 
guav ©   (2006-10-12 18:55) [21]

> [16] oldman ©   (12.10.06 18:40)

А например поменять местами файловые переменные Input и Output ? ;-)


 
ANB ©   (2006-10-12 18:55) [22]


> a:=a+b
> b:=substr(a,1,len(a)-len(b))
> a:=substr(a,len(a)-len(b)+1,len(a)-len(b))

ну нафиг. обмен через третью переменную шустрее отработает. и короче.


 
Zeqfreed ©   (2006-10-12 18:55) [23]

> [20] McSimm ©   (12.10.06 18:51)

xor, говорят ([19]), уже не в моде :)


 
McSimm ©   (2006-10-12 18:58) [24]


> Zeqfreed ©   (12.10.06 18:55) [23]
> xor, говорят ([19]), уже не в моде :)


А мы за модой не гоняемся.
Зато как красиво смотрится! :))


 
vidiv ©   (2006-10-12 19:00) [25]

так чтоли? :)
x:=x xor y;
y:=x xor y;
x := x xor y;


 
default ©   (2006-10-12 19:02) [26]

GeLLeR ©   (12.10.06 18:20)  
вот тебе ещё задачка
отрицательные числа в компе, как известно, в дополнительном коде представляются
чтобы из положительного числа получить отрицательное в литературе говорят что надо инвертировать биты, а потом прибавить 1
скажи, откуда это правило взялось?


 
Zeqfreed ©   (2006-10-12 19:04) [27]

> [25] vidiv ©   (12.10.06 19:00)

Да.


 
isasa ©   (2006-10-12 19:07) [28]

jack128 ©   (12.10.06 18:33) [10]

а для НЕчисловых (см [2] ) как???


:)
Сериализация - десериализация ...


 
default ©   (2006-10-12 19:17) [29]

кстати и при помощи +/- можно переполнения избежать:) если подумать


 
@!!ex ©   (2006-10-12 19:33) [30]


> А например поменять местами файловые переменные Input и
> Output ? ;-)

Если Input и Output - Стандарта Windows или *nix, То также как и числа, потому что они - числа.


 
default ©   (2006-10-12 19:38) [31]

в сишном коде икчендж можно, например, так сделать
 int x = 5, y = 7;
 y = x + 0 * (x = y);


 
vidiv ©   (2006-10-12 19:45) [32]


> в сишном коде икчендж можно, например, так сделать
>  int x = 5, y = 7;
>  y = x + 0 * (x = y);

ИМХО неправильно, ибо компилятор будет "незаметно" использовать третью переменную :)


 
vidiv ©   (2006-10-12 19:45) [33]

точнее нечестно =)


 
@!!ex ©   (2006-10-12 19:54) [34]


> vidiv ©   (12.10.06 19:45) [32]

Не факт.


 
@!!ex ©   (2006-10-12 19:55) [35]

P.S.
регистр и переменная - большая разница.


 
Marser ©   (2006-10-12 19:56) [36]

> [35] @!!ex ©   (12.10.06 19:55)
> P.S.
> регистр и переменная - большая разница.

Ошибочка. Как ромб и квадрат. Вот ячейка памяти и регистр процессора - действительно разные вещи.


 
@!!ex ©   (2006-10-12 19:57) [37]


> Marser ©   (12.10.06 19:56) [36]

Согласен, не правильно выразился.
Но вы меня поняли, :)


 
Vendict ©   (2006-10-12 20:38) [38]

ANB ©   (12.10.06 18:30) [7]
а на асме можно одним оператором, вроде как. что то вроде XCHNG

можно вроде так, но это не один оператор:
push a
push b
pop a
pop b

хотя тем же принципом можно и строковые (через стек всмысле)


 
Суслик ©   (2006-10-12 23:32) [39]

а я вообще не догадался, тупой видать.


 
Kolan ©   (2006-10-12 23:40) [40]


> а я вообще не догадался, тупой видать.

Я бы тоже через 3 поменял бы, и пошел дальше.

A=5
B=6
A=A+B
B=A-B
A=A-B

Потом через год вспоминай что это за бред...


 
Ученик чародея ©   (2006-10-13 00:19) [41]

Только про XCHG и PUSH/POP хотел сказать.., так опередили.

В принципе указанная выше задача показывает, что излишнее знание математики для программирования даже вредно, так как код, написанный чистыми математиками в коммерческих приложениях использовать нельзя.


 
default ©   (2006-10-13 00:23) [42]

Ученик чародея ©   (13.10.06 00:19) [41]
> что излишнее знание математики для программирования даже
> вредно, так как код, написанный чистыми математиками в коммерческих
> приложениях использовать нельзя.

серьёзная тут математика: операции прибавить и отнять:)
ты думаешь если кто-то смог додуматься до хитрого решения он не сможет увидеть его непрактичность если таковая имеется?:) если красивое решение будет непрактичным оно останется лишь в голове её разработчика:)


 
default ©   (2006-10-13 00:25) [43]


> vidiv ©   (12.10.06 19:45) [32]
>
> > в сишном коде икчендж можно, например, так сделать
> >  int x = 5, y = 7;
> >  y = x + 0 * (x = y);
>
> ИМХО неправильно, ибо компилятор будет "незаметно" использовать
> третью переменную :)

конечно, компиллер скомпилит код в котором будет третья переменная
но идея как раз и базировалась использовать этот нюанс сишного кода
то есть что бы эта промежуточная переменная "осталась за кадром":)


 
Думкин ©   (2006-10-13 05:55) [44]

> Ученик чародея ©   (13.10.06 00:19) [41]

Любите вы всякую чушь громогласно произносить. Покажите мне математика, который бы в реальной программе предложил использовать вышеуказанное? Но вот если бы были проблемы с доп. памятью - то математик может дать ответ - возможно ли решение или нет, в то время как Эдельвейсы будут строить ВД первого рода читая учебник Савельева до посинения.


 
Sandman29 ©   (2006-10-13 08:45) [45]

В общем виде задача не имеет решения.
Попробуйте обменять byte и File :)



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.046 c
15-1160656122
Slava812
2006-10-12 16:28
2006.11.05
Вкладка безопасность


15-1160150211
Velimir
2006-10-06 19:56
2006.11.05
Как сделать так чтобы пользователь не нажал на кнопку много раз?


2-1161596663
Ося
2006-10-23 13:44
2006.11.05
Динамически созданные СheckBox


6-1149245388
Dush
2006-06-02 14:49
2006.11.05
IP адрес выданный провайдером


15-1160814051
*Стажер*
2006-10-14 12:20
2006.11.05
История Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский