Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
1 / 1 / 1
Регистрация: 23.11.2015
Сообщений: 90
1

Создать массив, который одинаково читается как слева направо, так и справа налево (Палиндром)

23.11.2015, 21:18. Показов 6338. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите алгоритм работы задачи. Нужно создать массив, который одинаково читается как слева направо, так и справа налево.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2015, 21:18
Ответы с готовыми решениями:

Читается ли строка одинаково справа налево и слева направо (палиндром)?
Символьная строка содержит одно слово.Проверить ,будет ли оно читаться одинаково справа налево и...

Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево
Программа получает на вход одно натуральное число N, не превосходящее 100 000. Программа должна...

Написать программу, которая будет составлять число, которое читается одинаково как слева направо, так и справа налево
Текст задачи: "На вход программе подается набор символов, заканчивающийся символом 0 (в программе...

Дан массив А из k символов. Определить, симметричен ли он, т.е. читается ли он одинаково слева направо и справа налево.
Дан массив А из k символов. Определить, симметричен ли он, т.е. читается ли он одинаково слева...

14
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
23.11.2015, 21:28 2
PHP
1
$arr = array(1, 2, 1);
2
90 / 79 / 33
Регистрация: 17.08.2015
Сообщений: 512
Записей в блоге: 1
23.11.2015, 22:20 3
Jodah, ты супер!!! просто нет слов!

Добавлено через 30 секунд
тебя даже повторить не получится....
PHP
1
$arr = array(2, 1, 2);
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
23.11.2015, 23:07 4
а чего не
PHP
1
$arr = array(1,1,1,1);
??!

Добавлено через 1 минуту
Цитата Сообщение от Prorok256 Посмотреть сообщение
Нужно создать массив, который одинаково читается как слева направо, так и справа налево.
а чем ты его заполнять собрался?
Заполняй половину массива, вторую половину дублируй зеркально.
Получишь то, что тебе надо.
0
GoDr
23.11.2015, 23:08
  #5

Не по теме:

Цитата Сообщение от Sergio Leone Посмотреть сообщение
а чего не
это уже сложно!

0
1 / 1 / 1
Регистрация: 23.11.2015
Сообщений: 90
24.11.2015, 07:54  [ТС] 6
я не хочу создавать тупо массив палиндром)) я хочу чтобы он через цикл заполнялся. Например поменял размер массива и он все равно выводит его как палиндром. Вот как записать чтобы находилась середина массива и от нее заполнялась симметрия не соображу.
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
24.11.2015, 12:56 7
Цитата Сообщение от Prorok256 Посмотреть сообщение
чтобы он через цикл заполнялся
Это условие задания? Если не особо мудрствовать, то можно так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function palindrome_array($n, $to_str = false) {
    if( ($n = (int)$n) == 0 ) return false;
    $half = ceil($n / 2);
    $is_odd = $n % 2;
    $output = [];
    for($i = 0, $k = 0; $i < $n; $i++) {
        $output[] = $i < $half ? ++$k : ($is_odd ? --$k : $k--);    
    }
    return $to_str ? implode('', $output) : $output ;
}
 
print_r( palindrome_array(4) );
print_r( palindrome_array(5, true) );
Результаты:
PHP
1
2
3
4
5
6
7
8
Array
(
    [0] => 1
    [1] => 2
    [2] => 2
    [3] => 1
)
12321
0
1 / 1 / 1
Регистрация: 23.11.2015
Сообщений: 90
24.11.2015, 13:40  [ТС] 8
Через функцию? интересный примерчик. Спасибо буду изучать дальше)
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
24.11.2015, 13:44 9
Цитата Сообщение от Prorok256 Посмотреть сообщение
Через функцию?
А через какое место вы хотели? Можно и без функции. Я просто для удобства так оформил.
0
1 / 1 / 1
Регистрация: 23.11.2015
Сообщений: 90
24.11.2015, 14:12  [ТС] 10
мне интересно можно ли как нибудь через цикл это создать?

Добавлено через 2 минуты
мне интересно можно ли как нибудь через цикл это создать?
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
24.11.2015, 14:15 11
Цитата Сообщение от Prorok256 Посмотреть сообщение
как нибудь через цикл это создать
А for внутри функции - это разве не цикл? И разве не в нём формируется массив?
0
1 / 1 / 1
Регистрация: 23.11.2015
Сообщений: 90
24.11.2015, 14:31  [ТС] 12
Согласен))
Слушай, а не подскажешь зачем $is_odd = $n % 2; и $output[] = $i < $half ? ++$k : ($is_odd ? --$k : $k--); ???
С остальным вроде понятно.

Добавлено через 6 минут
$output - это массив пустой. Так? И если $i меньше середины массива то идет заполнение по возрастанию. А вот дальше я не пойму что то. И зачем $is_odd нужно.
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
24.11.2015, 14:48 13
Цитата Сообщение от Prorok256 Посмотреть сообщение
А вот дальше я не пойму что то
$is_odd - определяем нечетное число. Если нечетное, то префиксный декремент (--$k), а если четное, то постфиксный декремент ($k--).
Теперь "на пальцах". Есть число 5, "середина" - 3. Итерации:
1. ++$k, ($k == 1)
2. ++$k, ($k == 2)
3. ++$k, ($k == 3)
Экватор. 5 нечетное, поэтому $k нужно сначала уменьшить на единицу и только потом вернуть результат. $k у нас пока 3, --$k - будет 2.
4. --$k, ($k == 2)
5. --$k, ($k == 1)

Теперь, если число четное - 4, середина - 2
1. ++$k, ($k == 1)
2. ++$k, ($k == 2)
Экватор. Если бы мы, как с нечетным, сначала уменьшили на единицу, то результат был бы такой:
3. --$k, ($k == 1)
4. --$k, ($k == 0)
Поэтому, для четных используем постфиксный декремент, т.е. сначала вернуть результат, а потом увеличить на единицу. В итоге, последние две итерации, выглядят так:
3. $k--, ($k == 2)
4. $k--, ($k == 1)

P.S. Ну, вроде бы даже мой кот понял
0
1 / 1 / 1
Регистрация: 23.11.2015
Сообщений: 90
24.11.2015, 14:59  [ТС] 14
Спасибо большое)) я понимал что надо массив пополам делить, но как сделать не втыкал никак. Спасибо за помощь.
Посоветуй литературу по php интересную. Хочу тоже научиться так задачки щелкать
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
24.11.2015, 15:08 15
Цитата Сообщение от Prorok256 Посмотреть сообщение
литературу по php интересную
Я только одной литературой пользуюсь - Официальное руководство по PHP.
Цитата Сообщение от Prorok256 Посмотреть сообщение
научиться так задачки щелкать
Литература тут не особо поможет, если логическое мышление не развито (ИМХО).
0
24.11.2015, 15:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2015, 15:08
Помогаю со студенческими работами здесь

Одинаково ли список читается слева направо и справа налево?
Привет! А как определить считается ли, заданный список одинаково слева направо и справа налево ?

Проверить читается ли число одинаково слева направо и справа налево?
Дано четырехзначное число. Проверить истинность высказывания: «Данное число читается одинаково...

Данное четырехзначное число читается одинаково слева направо и справа налево
Нужна помощь :) Проверить истинность высказывания: «Данное четырехзначное число читается одинаково...

Как написать код для данной задачи - четырехзначное число читается одинаково слева направо и справа налево?
Составить линейную логическую программу, печатающую значение true, если указанное высказывание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru