Она не сложная, но для "потренировать моск" - самое то.
Повторюсь что она для начинающих, профи, не лезте!)
Задача:
дано целое двух-трёхзначное число. Нужно его "округлить" до ближайшей 5-ки или до нуля.
Пример (дано : получаем):
150 : 150
151 : 150
152 : 150
153 : 155
154 : 155
155 : 155
156 : 155
157 : 155
158 : 160
159 : 160
Условия:
- нужно работать с числами как с числами (а не как со строками)
- нельзя использовать готовые функции (типа round, floor, ...)
- т.е. можно использовать только логические операторы и математические дейтсвия (сложение, вычитание, деление, ...)
А вам слабо? :)
Спустя 12 минут, 56 секунд (7.07.2011 - 20:45) Mirexzpalich написал(а):
% можно?
![rolleyes.gif](http://phpforum.ru/html/emoticons/rolleyes.gif)
Спустя 2 минуты, 56 секунд (7.07.2011 - 20:48) Winston написал(а):
Цитата (Mirexzpalich @ 7.07.2011 - 20:45) |
% можно |
Цитата (kirik @ 7.07.2011 - 20:32) |
только логические операторы и математические дейтсвия |
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 10 минут, 18 секунд (7.07.2011 - 20:58) DySprozin написал(а):
kirik
так или читерство? (;
<?php
function myokr($ch) {
$okr = 10*(int)($ch/10);
$ost = $ch - $okr;
if ($ost < 3) $ost = 0;
elseif ($ost > 7) $ost = 10;
else $ost = 5;
echo ($okr + $ost).'<br>';
}
myokr(150);
myokr(151);
myokr(152);
myokr(153);
myokr(154);
myokr(155);
myokr(156);
myokr(157);
myokr(158);
myokr(159);
Спустя 2 минуты, 25 секунд (7.07.2011 - 21:00) Mirexzpalich написал(а):
Цитата |
только логические операторы и математические дейтсвия |
$a = 122;
echo $a.'<br />';
$b = 0;
while($a>2)
{
$a -= 5;
$b +=5;
}
echo $b;
Спустя 1 минута, 49 секунд (7.07.2011 - 21:02) inpost написал(а):
kirik
Эх, всего 30 секунд в туалете :)
Эх, всего 30 секунд в туалете :)
во :)
function opa($x,$y = 5,$z = 2)
{
$temp = ($x%$y);
if($temp)
{
if($temp>$z)
$x = $x + ($y-$temp);
else
$x = $x - $temp;
}
return $x;
}
echo opa(333);
Спустя 8 минут, 30 секунд (7.07.2011 - 21:11) DySprozin написал(а):
еще вариант (; правда у Mirexzpalich красивей канеш))
<?php
function myokr($ch) {
$ost = ($ch/10);
while (--$ost > 0) {};
if ($ost != 0) $ost = ++$ost*10;
$okr = $ch - $ost;
if ($ost < 3) $ost = 0;
elseif ($ost > 7) $ost = 10;
else $ost = 5;
echo ($okr + $ost).'<br>';
}
myokr(150);
myokr(151);
myokr(152);
myokr(153);
myokr(154);
myokr(155);
myokr(156);
myokr(157);
myokr(158);
myokr(159);
Спустя 3 минуты, 8 секунд (7.07.2011 - 21:14) inpost написал(а):
вот, выше себе спойлер добавил
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 2 минуты, 19 секунд (7.07.2011 - 21:16) DySprozin написал(а):
inpost
не чеееестнаа, у тя там процент %
хотя не знаю, можно было ли по условию его юзать
не чеееестнаа, у тя там процент %
![tongue.gif](http://phpforum.ru/html/emoticons/tongue.gif)
![rolleyes.gif](http://phpforum.ru/html/emoticons/rolleyes.gif)
Спустя 3 минуты, 1 секунда (7.07.2011 - 21:19) Mirexzpalich написал(а):
Адин фиг у мну п*зжэ =)
Спустя 42 секунды (7.07.2011 - 21:20) DySprozin написал(а):
Mirexzpalich
воистину
воистину
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
Спустя 27 секунд (7.07.2011 - 21:20) Winston написал(а):
Офигеть :blink:
МЕГАЗВРАЩЕНИЕ
$n = 123;
echo $n % 5 == 0 ? $n : ($n % 2 == 1 && $n % 5 == 1 ? $n - ($n % 5) : ($n % 2 == 1 && $n % 5 == 3 ? $n + 2 : ($n % 2 == 0 && $n % 5 == 4 ? $n + 1 : ($n % 2 == 1 && $n % 5 == 2 ? $n - 2 : ($n % 2 == 0 && $n % 5 == 3 ? $n + 2 : ($n % 2 == 1 && $n % 5 == 4 ? $n + 1 : ($n % 2 == 0 && $n % 5 == 2 ? $n - 2 : ($n % 2 == 0 && $n % 5 == 1 ? $n - 1 : ''))))))));
Спустя 26 секунд (7.07.2011 - 21:21) inpost написал(а):
DySprozin
Это оператор, поэтому можно. % не является функцией, а запрещено пользоваться готовыми функциями
Это оператор, поэтому можно. % не является функцией, а запрещено пользоваться готовыми функциями
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 59 секунд (7.07.2011 - 21:22) Mirexzpalich написал(а):
PHPprogramer
Ты стал моим кумиром!!!!
Ты стал моим кумиром!!!!
Спустя 8 секунд (7.07.2011 - 21:22) DySprozin написал(а):
PHPprogramer
зато в одну строчку и ниипет ))
зато в одну строчку и ниипет ))
Спустя 2 минуты, 3 секунды (7.07.2011 - 21:24) Winston написал(а):
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
Спустя 39 секунд (7.07.2011 - 21:25) inpost написал(а):
Mirexzpalich
Хорошее решение, только циклы перебирать, а если цифра слишком большая, печалька будет![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
PHPprogramer
Не просто МЕГА, а мега-мега-мега
Посмотри как просто я сделал через %
Хорошее решение, только циклы перебирать, а если цифра слишком большая, печалька будет
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
PHPprogramer
Не просто МЕГА, а мега-мега-мега
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 4 минуты, 3 секунды (7.07.2011 - 21:29) Mirexzpalich написал(а):
inpost
Этож какая циферка должна быть???? стопицот мулёнов тысяч????
Этож какая циферка должна быть???? стопицот мулёнов тысяч????
Спустя 1 минута, 10 секунд (7.07.2011 - 21:30) DySprozin написал(а):
inpost
;;а если цифра слишком большая
по условию - речь о 2-3 значном числе (;
;;а если цифра слишком большая
по условию - речь о 2-3 значном числе (;
Спустя 5 минут, 52 секунды (7.07.2011 - 21:36) inpost написал(а):
...во, подправил, чтобы вообще шик было ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Mirexzpalich
30 товаров на странице, каждая имеет цену прошлую и новую, итого 60 цифр, сумма от 10`000 руб. до 500`000 руб![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
DySprozin
К чему придирки?
Я же сказал, что реализация хорошая, я тоже так же хотел в начале сделать
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Mirexzpalich
30 товаров на странице, каждая имеет цену прошлую и новую, итого 60 цифр, сумма от 10`000 руб. до 500`000 руб
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
DySprozin
К чему придирки?
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 1 час, 51 минута, 4 секунды (7.07.2011 - 23:27) kirik написал(а):
Ничесе, не ожидал что столько откликнется :)
Цитата (Mirexzpalich @ 7.07.2011 - 13:45) |
% можно? |
можно, он ведь арифметический оператор.
PHPprogramer получает звание "обфускатор года" :)
inpost
хорошее решение! У меня похожее :)
Свернутый текст
function округлись($num) {
return ($t = $num % 5) ? ($t > 2 ? 5 - $t + $num : $num - $t) : $num;
}
for($i = 150; $i < 169; $i++) {
echo $i . ' : ' . округлись($i) . '<br />';
}
Ещё варианты?
Спустя 12 минут, 25 секунд (7.07.2011 - 23:39) DySprozin написал(а):
;;PHPprogramer получает звание "обфускатор года" ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
ох, не завидую я Твину, когда он будет его не-кАПЧХИзащиту проверять
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
ох, не завидую я Твину, когда он будет его не-кАПЧХИзащиту проверять
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
Спустя 3 дня, 9 часов, 53 минуты, 33 секунды (11.07.2011 - 09:33) linker написал(а):
Моё решение
for($i = 150; $i < 160; ++ $i)
echo ($t = $i % 5) > 2 ? $i + (5 - $t) : $i - $t;
Спустя 5 часов, 45 минут, 24 секунды (11.07.2011 - 15:18) Raito-kun написал(а):
только проснулся, заняло 2 минуты, но безо всякой оптимизации, чужие ответы вижу изящнее :)
$a = 18;
if($a%10 >= 0 && $a%10 <= 2) {
$a = $a - $a%10;
}
else if($a%10 >= 3 && $a%10 <= 7) {
$a = $a - $a%10 + 5;
}
else if($a%10 >= 8 && $a%10 <= 9) {
$a = $a - $a%10 + 10;
}
echo $a;
Спустя 1 час, 1 минута, 20 секунд (11.07.2011 - 16:19) Winston написал(а):
Цитата (Raito-kun @ 11.07.2011 - 15:18) |
чужие ответы вижу изящнее |
Мое решений безусловно самое лучшее
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
Спустя 59 минут, 1 секунда (11.07.2011 - 17:18) Trianon написал(а):
что-то как-то всё обло, огромно, озорно, стозево и
лаяй
function k($n) { $n += 3; return $n - $n%5; }
function p($n) { echo "<br>".$n." - ".k($n); }
p(150);
p(151);
p(152);
p(153);
p(154);
p(155);
p(156);
p(157);
p(158);
p(159);
Спустя 4 минуты, 54 секунды (11.07.2011 - 17:23) Invis1ble написал(а):
Trianon
тогда уж
тогда уж
function k($n) { $n += 2; return $n - $n%5; }
function p($n) { echo "<br>".$n." - ".k($n); }
p(150);
p(151);
p(152);
p(153);
p(154);
p(155);
p(156);
p(157);
p(158);
p(159);
Спустя 4 минуты, 15 секунд (11.07.2011 - 17:28) Trianon написал(а):
Invis1ble
ну да. на единичку промазал.
ну да. на единичку промазал.
Спустя 27 минут, 40 секунд (11.07.2011 - 17:55) Winston написал(а):
![ohmy.gif](http://phpforum.ru/html/emoticons/ohmy.gif)