Last active
December 4, 2022 17:24
-
-
Save pawjunior/fc8c01c1f16f5b79ae415a296a295bb5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Задания этого типа удобнее проверять здесь: https://www.onlinegdb.com/online_php_interpreter | |
//На вход подается строка из чисел, разделенных пробелами. Найдите максимальное произведение двух чисел из этой строки. | |
<?php | |
$line = trim(fgets(STDIN)); | |
$nums = explode(' ', $line); | |
$max = $nums[0] * $nums[1]; | |
foreach($nums as $i => $num1) { | |
foreach($nums as $j => $num2) { | |
if ($i === $j) { | |
continue; | |
} | |
$product = $num1 * $num2; | |
if ($product > $max) { | |
$max = $product; | |
} | |
} | |
} | |
echo $max; | |
?> | |
//Дано время в формате hh:mm - 12 часов 48 минут. Найдите кратчайший угол между часовой и минутной стрелками на аналоговых часах. | |
<?php | |
$line = "12:48"; | |
[$hours, $minutes] = explode(':', $line); | |
if ($hours > 12) { | |
$hours = $hours - 12; | |
} | |
$hoursHandAngle = $hours * 360 / 12 + $minutes * 360 / 12 / 60; | |
$minutesHandAngle = $minutes * 360 / 60; | |
$angle = abs($hoursHandAngle - $minutesHandAngle); | |
echo $angle > 180 | |
? 360 - $angle | |
: $angle; | |
?> | |
/* | |
Счастливый билет - это когда сумма первых трех цифр в номере билета равна сумме второй тройки цифр (номер шестизначный). Пример: 123015 - счастливый, так как сумма каждой из половин равна 6. | |
На вход подаются 2 строки: | |
начальный номер билета (например: 111111) | |
конечный номер билета (например: 123321) | |
Нужно вывести все счастливые билеты из заданного диапазона. | |
*/ | |
<?php | |
$from = 111111; | |
$to = 123321; | |
for ($i = $from; $i <= $to; $i++) { | |
$str = (string)$i; | |
$sumOfFirst = 0; | |
$sumOfLast = 0; | |
for ($j = 0; $j < 6; $j++) { | |
if ($j < 3) { | |
$sumOfFirst += (int)$str[$j]; | |
} else { | |
$sumOfLast += (int)$str[$j]; | |
} | |
} | |
if ($sumOfFirst === $sumOfLast) { | |
echo $i .'<br>'; | |
} | |
} | |
?> | |
//На вход подается строка целых уникальных (не повторяющихся) чисел, разделенных пробелами. Найдите все возможные комбинации пар чисел и выведите их в любом порядке | |
<?php | |
$line = "1 2 3"; | |
$nums = explode(' ', $line); | |
foreach ($nums as $i => $num1) { | |
foreach ($nums as $j => $num2) { | |
if ($i === $j) { | |
continue; | |
} | |
echo $num1 . ' ' . $num2 . PHP_EOL . '<br>'; | |
} | |
} | |
?> | |
//На вход дана строка с числами, разделенными пробелами. Удалите все повторы чисел. Выведите их в любом порядке, разделив пробелами. | |
<?php | |
$line = "0 2 3 1 2"; | |
$nums = explode(' ', $line); | |
$numsPrinted = []; | |
foreach ($nums as $num) { | |
if (!isset($numsPrinted[$num])) { | |
$numsPrinted[$num] = true; | |
echo $num . ' '; | |
} | |
} | |
?> | |
//Вычислите выражение (sin30°+3/4)/|1/5-3/7|+log10100. Для решения используйте математические функции, имеющиеся в PHP. | |
<?php | |
echo (sin(deg2rad(30))+3/4)/abs(1/5-3/7)+log10(100); | |
?> | |
//Числа Фибоначчи - это последовательность чисел, в которой первые два числа это 0 и 1, а каждое следующее число равно сумме двух предыдущих. В этой программе вам нужно написать код, который будет выводить первые n чисел этой последовательности. | |
<?php | |
$one = 0; | |
$two = 1; | |
for ($i = 1; $i <= 10; $i++) { | |
$current = $one + $two; | |
$one = $two; | |
$two = $current; | |
echo $current . "\n"; | |
} | |
?> | |
//Задайте случайным образом массив из N элементов (целых чисел). Найдите максимальное число и напечатайте его. | |
<?php | |
$a = array (); | |
$N=20; | |
for ($i=0;$i<=$N-1;$i++) { | |
$a [$i] =rand(); | |
echo $a[$i],"<BR>"; | |
if ( $i>=1 and $a[$i]>$a[$i-1] ) { | |
$max=$a[i]; | |
} else { | |
if ( $i>=1) { | |
$max=$a[$i-1]; | |
$a[$i-1]=$a[$i]; | |
$a[$i]=$max; | |
} | |
} | |
} | |
echo "Наибольшее число равно: ", $max; | |
?> | |
//Пользователь вводит номер дня недели. Вывести название дня недели. | |
<?php | |
$w = Array(1=>'Пн','Вт','Ср','Чт','Пт','Сб','Вс'); | |
$n = 6; //номер нужного дня | |
echo $w[$n]."<br>"; | |
?> | |
//Пользователь вводит свой возраст. Если он больше 80 лет, то вывести 'Здравствуйте, уважаемый', иначе 'Успехов!'. | |
<?php | |
$years = 84; | |
if (0 < $years && $years <= 80) { | |
echo "Успехов"; | |
} | |
else echo "Здравствуйте, уважаемый"; | |
?> | |
//Дано два натуральных числа. Вывести 'Да', если они отличаются не более чем на 20, иначе вывести 'Нет'. | |
<?php | |
$a = 5; | |
$b = 30; | |
if ($b-$a > 20 || $a-$b > 20) { | |
echo "Нет"; | |
} | |
else echo "Да"; | |
?> | |
//На вход подается строка из чисел, разделенных пробелами. Найдите все числа, встречающиеся 2 и более раз. Выведите их в любом порядке, разделяя пробелами. | |
<?php | |
$line = "3 2 5 2 1 3"; | |
$nums = explode(' ', $line); | |
$duplicatedValues2Count = []; | |
foreach ($nums as $num) { | |
if (!isset($duplicatedValues2Count[$num])) { | |
$duplicatedValues2Count[$num] = 1; | |
} else { | |
$duplicatedValues2Count[$num]++; | |
} | |
if ($duplicatedValues2Count[$num] === 2) { | |
echo $num . ' '; | |
} | |
} | |
?> | |
//Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа. | |
<?php | |
function numbersSquareCube($i) | |
{ | |
$sum = (($i-$i%100)/100)+(($i/10)%10)+($i%10); | |
if (pow($sum,3) == pow($i,2)) { | |
echo "Равен"; | |
} | |
else echo "Не равен"; | |
} | |
numbersSquareCube(121); | |
?> | |
//На вход подаётся строка с датой в формате ДД.ММ.ГГГГ (пример: 15.04.1452). Выведите знак зодиака для этого дня. | |
<?php | |
$date = DateTime::createFromFormat('d.m.Y', '12.10.1995')->setTime(0, 0); | |
$zodiacIntervals = [ | |
'Водолей' => ['21.01', '19.02'], | |
'Рыбы' => ['20.02', '20.03'], | |
'Овен' => ['21.03', '20.04'], | |
'Телец' => ['21.04', '21.05'], | |
'Близнецы' => ['22.05', '21.06'], | |
'Рак' => ['22.06', '22.07'], | |
'Лев' => ['23.07', '21.08'], | |
'Дева' => ['22.08', '23.09'], | |
'Весы' => ['24.09', '23.10'], | |
'Скорпион' => ['24.10', '22.11'], | |
'Стрелец' => ['23.11', '22.12'], | |
]; | |
foreach ($zodiacIntervals as $zodiac => $intervals) { | |
$from = DateTime::createFromFormat('d.m.Y', $intervals[0] . $date->format('.Y'))->setTime(0, 0); | |
$to = DateTime::createFromFormat('d.m.Y', $intervals[1] . $date->format('.Y'))->setTime(23, 59, 59, 999999); | |
if ($date <= $to && $date >= $from) { | |
echo $zodiac; | |
return; | |
} | |
} | |
echo 'Козерог'; | |
?> | |
//Даны две точки A(x1, y1) и B(x2 , y2 ) . Составить алгоритм, определяющий, которая из точек находится ближе к началу координат | |
<?php | |
$x1 = 14; | |
$y1 = 76; | |
$x2 = 24; | |
$y2 = 65; | |
$a = sqrt(($x1*$x1)+($y1*$y1)); | |
$b = sqrt(($x2*$x2)+($y2*$y2)); | |
if ($a<$b) { | |
echo "Точка А ближе"; | |
} | |
else if ($a>$b) { | |
echo "Точка B ближе"; | |
} | |
else echo "Точки равноудалены"; | |
?> | |
//Написать программу-калькулятор, которая позволит пользователю передать два числа и указать арифметическую операцию, выполняемую над ними. | |
<!DOCTYPE HTML> | |
<html lang="ru"> | |
<head> | |
<meta charset = "UTF-8"> | |
<link rel="stylesheet" href="styles.css" type="text/css" /> | |
</head> | |
<body> | |
<h1>Протокалькулятор</h1> | |
<form action='' method='post' class="calculate-form"> | |
<input type="text" name="number1" class="numbers" placeholder="Первое число"> | |
<select class="operations" name="operation"> | |
<option value='plus'>+</option> | |
<option value='minus'>-</option> | |
<option value="multiply">*</option> | |
<option value="divide">/</option> | |
</select> | |
<input type="text" name="number2" class="numbers" placeholder="Второе число"> | |
<input class="submit_form" type="submit" name="submit" value="Получить ответ"> | |
</form> | |
</body> | |
</html> | |
<?php | |
if(isset($_POST['submit'])){ | |
$number1 = $_POST['number1']; | |
$number2 = $_POST['number2']; | |
$operation = $_POST['operation']; | |
// Валидация | |
if(!$operation || (!$number1 && $number1 != '0') || (!$number2 && $number2 != '0')) { | |
$error_result = 'Не все поля заполнены'; | |
} | |
else { | |
if(!is_numeric($number1) || !is_numeric($number2)){ | |
$error_result = "Операнды должны быть числами"; | |
} | |
else | |
switch($operation){ | |
case 'plus': | |
$result = $number1 + $number2; | |
break; | |
case 'minus': | |
$result = $number1 - $number2; | |
break; | |
case 'multiply': | |
$result = $number1 * $number2; | |
break; | |
case 'divide': | |
if( $number2 == '0') | |
$error_result = "На ноль делить нельзя!"; | |
else | |
$result = $number1 / $number2; | |
break; | |
} | |
} | |
if(isset($error_result)){ | |
echo "<div class='error-text'>Ошибка: $error_result</div>"; | |
} | |
else { | |
echo "<div class='answer-text'>Ответ: $result</div>"; | |
} | |
} | |
?> | |
/* | |
На вход подается строка из чисел, разделенных пробелами. | |
Замените каждый элемент строки произведением всех других элементов. | |
Рассмотрим на примере строки "1 2 3". | |
Новое значение вместо "1" это "2 * 3 = 6". Для "2" это "1 * 3 = 3". Для "3" это "1 * 2 = 2" | |
*/ | |
<?php | |
$line = "1 2 3"; | |
$nums = explode(' ', $line); | |
$product = null; | |
$productWithoutZero = null; | |
$zerosCount = 0; | |
foreach ($nums as $i => $num) { | |
if ($product === null) { | |
$product = $num; | |
} else { | |
$product *= $num; | |
} | |
if ($num == 0) { | |
$zerosCount++; | |
continue; | |
} | |
if ($productWithoutZero === null) { | |
$productWithoutZero = $num; | |
} else { | |
$productWithoutZero *= $num; | |
} | |
} | |
if ($zerosCount > 1) { | |
$productWithoutZero = 0; | |
} | |
foreach ($nums as $i => $num) { | |
if ($num == 0) { | |
echo $productWithoutZero . ' '; | |
continue; | |
} | |
echo $product / $num . ' '; | |
} | |
?> | |
//Пользователь выбирает из выпадающего списка страну (Турция, Египет или Италия), вводит количество дней для отдыха и указывает, есть ли у него скидка (чекбокс). Вывести стоимость отдыха, которая вычисляется как произведение количества дней на 400. Далее это число увеличивается на 10%, если выбран Египет, и на 12%, если выбрана Италия. И далее это число уменьшается на 5%, если указана скидка. | |
<form method="POST"> | |
<p><label>Выберите страну<em>*</em></label> | |
<select name="country" name="mat"> | |
<option value="1">Турция</option> | |
<option value="2">Египет</option> | |
<option value="3">Италия</option> | |
</select></p> | |
<p><label>Выберите количество дней<em>*</em></label> | |
<input type="text" name="days"/></p> | |
<p><label>Скидка в 5%<em>*</em></label> | |
<input type="checkbox" name="vibor"/></p> | |
<input type="submit" value="Go"> | |
</form> | |
<?php | |
if (isset($_POST['country']) &&is_numeric($_POST['days'])){ | |
$v = 0; | |
$i = "без скидки"; | |
if (isset($_POST['vibor'])==true){ | |
$v = 400 /100 *5; | |
$i = "со скидкой 5%"; | |
} | |
if ($_POST['country']==1){ | |
$a = $_POST['days']; | |
$a *= 400 - $v; | |
echo "стоимость $a ".$i; | |
} | |
if ($_POST['country']==2){ | |
$a = $_POST['days']; | |
$a *= 400 - $v; | |
$b = $a/100 *10; | |
$c = $a + $b; | |
echo "стоимость $c ".$i; | |
} | |
if ($_POST['country']==3){ | |
$a = $_POST['days']; | |
$a *= 400 - $v; | |
$b = $a/100 *12; | |
$c = $a + $b; | |
echo "стоимость $c ".$i; | |
} | |
} else echo "выбрать маршрут"; | |
?> | |
/* | |
Нужно написать код, который будет принимать на вход число и 3 формы слова - 3 склонения в зависимости от числа, с которым они употребляются в речи. Например: яблоко (одно), яблока (три), яблок (пять). В зависимости от числа нужно выбрать правильную форму слова и вывести на экран фразу из числа и слова. | |
На вход подаётся 4 строки: | |
число | |
слово в единственном числе (одно яблоко) | |
слово в множественном числе, когда речь идёт о двух объектах (два яблока) | |
слово в множественном числе, когда речь идёт о пяти объектах (пять яблок) | |
Вывести нужно число и слово в правильном склонении, разделённые пробелами. | |
*/ | |
<?php | |
$num = 4; | |
$form1 = "яблоко"; | |
$form2 = "яблока"; | |
$form5 = "яблок"; | |
$lastNum = $num % 10; | |
switch ($lastNum) { | |
case 1: | |
echo $num . ' ' . $form1; | |
break; | |
case 2: | |
echo $num . ' ' . $form2; | |
break; | |
default: | |
echo $num . ' ' . $form5; | |
} | |
?> | |
//Создайте массив, в который поместите все натуральные числа, не превышающие 15. Отфильтруйте полученный массив при помощи функции array_filter(), удалив из массива все нечетные значения. Выведите оставшиеся элементы массива на экран | |
<?php | |
//Создаем пустой массив. Можно и $m=array(); | |
$m=[]; | |
//Циклом заполняем его | |
for($n=1;$n<=15;$n++){ | |
//Добавляем текущее число n в массив | |
$m[]=$n; | |
} | |
//Создаем callback-функцию для фильтрации элементов | |
function my_func($val){ | |
//Если элемент массива нечетное число | |
if($val%2!=0){ | |
//Возвращаем FALSE, чтобы элемент был удален из массива | |
return false; | |
} | |
//Возвращаем TRUE для четного элемента массива | |
return true; | |
} | |
//Фильтруем элементы массива | |
$m = array_filter($m,"my_func"); | |
//Выводим четные элементы массива на экран через пробел | |
foreach($m as $value){ | |
echo $value.' '; | |
} | |
?> | |
/* | |
На вход подается строка целых чисел, разделенных пробелами. | |
Нужно найти последовательность подряд идущих чисел, у которой сумма элементов будет максимальной. | |
Например, для строки "-2 1 -3 4 -1 2 1 -5 4" решением будет последовательность "4 -1 2 1" с максимальной суммой элементов равной "6". | |
Вывести нужно максимальную сумму подряд идущих элементов. | |
Нужно учитывать, что последовательность может представлять собой лишь одно число (смотрите пример с отрицательными числами). | |
*/ | |
<?php | |
$line = "-2 1 -3 4 -1 2 1 -5 4"; | |
$nums = explode(' ', $line); | |
$numsCount = count($nums); | |
$maxSumCurrent = $nums[0]; | |
$maxSumTotal = $nums[0]; | |
for ($i = 1; $i < $numsCount; $i++) { | |
$num = $nums[$i]; | |
$maxSumCurrent += $num; | |
if ($maxSumCurrent < $num) { | |
$maxSumCurrent = $num; | |
} | |
if ($maxSumCurrent > $maxSumTotal) { | |
$maxSumTotal = $maxSumCurrent; | |
} | |
} | |
echo $maxSumTotal; | |
?> | |
//Создайте переменные, присвоив им логические значения true и false, вещественное число 43.658+e2, но предварительно записав его в обычном виде, и корень квадратный из отрицательного числа, например, sqrt(-2). Выведите значения всех переменных на экран. | |
<?php | |
$a=true; //Присвоили логическое значение true | |
$b=false; //Присвоили логическое значение false | |
$f=4365.8; //Присвоили вещественное число | |
$z=sqrt(-2); //Присвоили корень квадратный из -2 | |
echo $a, '<br>'; //Выведет 1, т.к. true преобразуется в строку '1' | |
echo $b, '<br>'; //Выведет пустую строку, т.к. false преобразуется в '' | |
echo $z, '<br>'; //Выведет NAN | |
echo $f; //Выведет 4365.8, точнее строку '4365.8' | |
?> | |
//Создайте переменные $a, $b и присвойте им положительные числа. Присвойте частное от деления $a/$b третьей переменной $d. Используя условный оператор if, осуществите схему вывода на экран значения переменной $d только в том случае, если оно является положительным числом. Проверьте работу скрипта, после чего измените одно из значений переменных на отрицательное число и снова запустите скрипт. | |
<?php | |
//Присвоили первой переменной положительное число | |
$a=10; | |
//Присвоили второй переменной положительное число | |
$b=5; | |
//Присвоили частное третьей переменной | |
$d=$a/$b; | |
//Проверяем условие | |
if($d>0){ | |
//Выводим только, если условие истинно | |
echo $d; | |
} | |
?> | |
//На вход подается строка из чисел, разделенных пробелами. Переместите все нули в конец строки. Порядок остальных чисел должен сохраниться. | |
<?php | |
$line = "7 0 39 0 282 2 4 0 45"; | |
$nums = explode(' ', $line); | |
$zerosCount = 0; | |
foreach ($nums as $num) { | |
if ($num == 0) { | |
$zerosCount++; | |
} else { | |
echo $num . ' '; | |
} | |
} | |
echo str_repeat('0 ', $zerosCount); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment