|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Eдна закачка
|
|
Автор |
zdrsoft (непознат
) |
Публикувано | 21.06.07 16:48 |
|
Здравейте
една закачка от мен :)
Например имате две целочислени променливи:
$a = 35;
$b = 48;
Напишете размяна на двте стойности в променливите, без да ползвате допълнителна променлива.
Успех
| |
Тема
|
Пояснение: Математическо или езиково решение?
[re: zdrsoft]
|
|
Автор |
martyr (мчк) |
Публикувано | 21.06.07 17:05 |
|
Ето езиковото (еУементаУно):
#!/usr/bin/perl -w
my $a = 35;
my $b = 48;
print "$a $b\n";
($a, $b) = ($b, $a);
print "$a $b\n";
| |
Тема
|
Re: Eдна закачка
[re: zdrsoft]
|
|
Автор |
PxL (непознат
) |
Публикувано | 21.06.07 17:21 |
|
php -r '$a=35;$b=48;printf("\nOld a=%d\nb=%d\n",$a,$b);$a=$b^$a;$b=$b^$a;$a=$a^$b;printf("\nNew a=%d\nb=%d\n",$a,$b);';
perl -e '$a=35;$b=48;printf("\nOld a=%d\nb=%d\n",$a,$b);$a=$b^$a;$b=$b^$a;$a=$a^$b;printf("\nNew a=%d\nb=%d\n",$a,$b);';
Редактирано от PxL на 21.06.07 17:24.
| |
|
my $a=35;
my $b=48;
print STDERR "A=$a B=$b\n";
$a+=$b;
$b=$a-$b;
$a=$a-$b;
print STDERR "A=$a B=$b\n";
Е на Мартир решението е много по елегантно ама ....
Bеer? Mоre?
| |
|
swap na vars stava po edin nachin za silnite ezici (ne stava duma za chikii kato php i t.n.)
ruby -e 'a = 1; b = 2; a,b = b,a; print a," ", b'
python -c 'a = 1; b = 2; a,b = b,a; print a, b'
perl -e '$a = 1; $b = 2; ($a,$b) = ($b,$a); print "$a $b"' #blagodarenie na galfona Larry Wall trqbva da se ukaje kontekst (adski "umno")
| |
Тема
|
Re: Eдна закачка
[re: zdrsoft]
|
|
Автор |
PxL (непознат
) |
Публикувано | 25.06.07 14:21 |
|
На PHP може да /изглежда/ нормално ;)
php -r '$a=1; $b=2; list($a,$b)=array($b,$a); print "$a $b";'
пп Според мен имаше се в предвид алтернативни методи за всеки език, тъй като е в още няколко раздела тази тема
Редактирано от PxL на 25.06.07 14:30.
| |
Тема
|
Re: Eдна закачка
[re: PxL]
|
|
Автор | zdrsoft (Нерегистриран) |
Публикувано | 20.08.07 18:22 |
|
Не идеята беше да се даде само математическо решение с прости операции.
| |
|
Тогава решението по-горе с ксоровете е твойта идея, или онова с ваденето. Любопитен е въпросът, кое е най-бързо. Иначе на някакъв асемблер е най-гъзарско. Най-общо разменяш 2 думи (променливи) в паметта - Лоудваш двете клетки в два регистъра и после сторваш наобратно. Това е само мемори-аксес и нито една аритметическа операция. Верно, че на фона на модерните процесори аритметическите операции са незначими спрямо латентноста на паметите и ботъл-нека ти е колко уейт-стейта ще изциклиш. Но пък я си представи, че ЦПУ-то е некакъв умрел евтин ПИК и от теб се очаква да го накараш да "прави мусака, да шета и да пере едновременно"....
| |
|
Е поне разбрах какво ползва тъщата вместо мозък :)
Bеer? Mоre?
| |
Тема
|
Re: Eдна закачка
[re: zdrsoft]
|
|
Автор | зakaчлив (Нерегистриран) |
Публикувано | 16.10.07 14:58 |
|
Забравих стойностите, затова:
$a = 10;
$b = 20;
$a = $a + $b;
$b = $a - $b; // $b = 10
$a = $a - $b; // $a = 20
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|