Skip to content

Instantly share code, notes, and snippets.

@pawjunior
Last active December 4, 2022 17:24
Show Gist options
  • Save pawjunior/fc8c01c1f16f5b79ae415a296a295bb5 to your computer and use it in GitHub Desktop.
Save pawjunior/fc8c01c1f16f5b79ae415a296a295bb5 to your computer and use it in GitHub Desktop.
//Задания этого типа удобнее проверять здесь: 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