Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.045 c
15-1160387840
Iamdanil
2006-10-09 13:57
2006.11.05
Задача по математике - помогите!


15-1160644112
Alien1769
2006-10-12 13:08
2006.11.05
Nokia 6280 vs Nokia 6880 (смартфон)


8-1143471233
Melf
2006-03-27 18:53
2006.11.05
Динамическая генерация *.gif по заданым цветам


1-1159196321
newbie2
2006-09-25 18:58
2006.11.05
Какой сhart в "Домашние финансы"


2-1161186419
Tab
2006-10-18 19:46
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский