[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задачка: округлить целое число
kirik
Задачку подкинул знакомый начинающий программист, и я решил поделиться с вами :)
Она не сложная, но для "потренировать моск" - самое то.
Повторюсь что она для начинающих, профи, не лезте!)

Задача:
дано целое двух-трёхзначное число. Нужно его "округлить" до ближайшей 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

Спустя 2 минуты, 56 секунд (7.07.2011 - 20:48) Winston написал(а):
Цитата (Mirexzpalich @ 7.07.2011 - 20:45)
% можно

Цитата (kirik @ 7.07.2011 - 20:32)
только логические операторы и математические дейтсвия

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 секунд в туалете :)

во :)
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

Спустя 2 минуты, 19 секунд (7.07.2011 - 21:16) DySprozin написал(а):
inpost
не чеееестнаа, у тя там процент % tongue.gif хотя не знаю, можно было ли по условию его юзать rolleyes.gif

Спустя 3 минуты, 1 секунда (7.07.2011 - 21:19) Mirexzpalich написал(а):
Адин фиг у мну п*зжэ =)

Спустя 42 секунды (7.07.2011 - 21:20) DySprozin написал(а):
Mirexzpalich
воистину 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

Спустя 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 laugh.gif laugh.gif

Спустя 39 секунд (7.07.2011 - 21:25) inpost написал(а):
Mirexzpalich
Хорошее решение, только циклы перебирать, а если цифра слишком большая, печалька будет smile.gif

PHPprogramer
Не просто МЕГА, а мега-мега-мега smile.gif Посмотри как просто я сделал через %

Спустя 4 минуты, 3 секунды (7.07.2011 - 21:29) Mirexzpalich написал(а):
inpost
Этож какая циферка должна быть???? стопицот мулёнов тысяч????

Спустя 1 минута, 10 секунд (7.07.2011 - 21:30) DySprozin написал(а):
inpost
;;а если цифра слишком большая
по условию - речь о 2-3 значном числе (;

Спустя 5 минут, 52 секунды (7.07.2011 - 21:36) inpost написал(а):
...во, подправил, чтобы вообще шик было smile.gif

Mirexzpalich
30 товаров на странице, каждая имеет цену прошлую и новую, итого 60 цифр, сумма от 10`000 руб. до 500`000 руб smile.gif

DySprozin
К чему придирки? smile.gif Я же сказал, что реализация хорошая, я тоже так же хотел в начале сделать 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
ох, не завидую я Твину, когда он будет его не-кАПЧХИзащиту проверять 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

Спустя 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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.