- •Арифметика
- •Зарплата
- •Больше - меньше
- •Два бандита
- •Конечные автоматы
- •Число е
- •Баскетбол
- •Клавиатура
- •Монетки
- •Неглухой телефон
- •Перепись
- •Журавлики
- •Разворот
- •Автобусная экскурсия
- •Оттепель
- •Сумма максимума и минимума
- •Школьная алгебра
- •Подмассив массива
- •Болты и гайки
- •Кругляши
- •Наименьшая система счисления
- •Четырехзначный палиндром
- •Время прибытия
- •Левая рекурсия
- •Железная дорога
- •Шахматный конь
- •Сбор черники
- •Цветочки
- •Очередь
- •Клавиатура - 2
- •День программиста
- •Модуль суммы
- •Внеземные гости
- •Треугольник - 3
- •Автобусы - 2
- •Золотой песок
- •Бинарные числа
- •Семестровые задачи Задание 1
- •Задание 2
- •Задание 3
Четырехзначный палиндром
Требуется написать программу, определяющую, является ли четырехзначное натуральное число N палиндромом, т.е. числом, которое одинаково читается слева направо и справа налево.
#include <iostream>
using namespace std;
main()
{
int i,n,k;
n=4;
cin>>k;
int a[n];
if((k>=1000) && (k<=9999)) {
for(i=1;i<=4;i=i+1)
{
a[i]=k%10;
k= k/10.0;
}
if ((a[1]==a[4]) && (a[2]==a[3])) cout<<"YES";
else cout<<"NO";}
}
Алгоритм решения:
Вводим число k. В цикле от 1 до 4 включительно заполняем массив, цифрами из числа. Если первая и последняя , вторая и третья цифры равны, выводим Yes, иначе No.
Время прибытия
Задано время отправления поезда и время в пути до конечной станции. Требуется написать программу, которая найдет время прибытия этого поезда (возможно, в другие сутки).
#include <iostream>
using namespace std;
main()
{
int a,b,m,n;
char c[5];
cin>>c;
cin>>m>>n;
a=(int(c[0])-int('0'))*10+(int(c[1])-int('0'));
b=(int(c[3])-int('0'))*10+(int(c[4])-int('0'));
b+=n;
a=(a+m+b/60)%24;
b%=60;
if(a>=10) cout<<a; else cout<<"0"<<a;
cout<<":";
if(b>=10) cout<<b; else cout<<"0"<<b;
}
Алгоритм решения:
В символьный массив записываем время отправки поезда. В переменные m и n вводим время поезда в пути. Переменную а переводим в тип int часы, а b в тип int минуты. Потом к b прибавляем минуты в пути, а к a часы в пути и часы от минут.
Остатком от деления на 24 проверяем подходит ли запись времени по формату, аналогично с минутами. Выводим время прибытия в нужном формате.
Лифт
В доме Вилли установили скоростной лифт новой экспериментальной модели. В этом лифте кнопки с номерами этажей заменены двумя другими кнопками. При нажатии на первую кнопку лифт поднимается на один этаж вверх, а при нажатии на вторую – опускается на один этаж вниз.
Младшему брату Вилли Дилли очень нравится кататься на новом лифте. Он катается на нём до тех пор, пока не побывает на каждом из этажей хотя бы по одному разу. После этого Дилли довольный возвращается домой.
Зная порядок, в котором Дилли нажимал на кнопки лифта, попробуйте определить общее количество этажей в доме Вилли и Дилли.
Алгоритм решения:
Вводим строку – последовательность нажатий на кнопки лифта. Поскольку мы не знаем, на каком этаже находимся, мы берем максимальное кол-во этажей 202 (101 вверх и 101 вниз) и предполагаем, что находимся на 101-ом, откуда начинаем отсчет, при этом присваиваем a[101] (a[h]) значение 1 (отмечаемся, что мы находимся на этом этаже). Затем в цикле от 0 до конца строки смотрим, чему равен текущий элемент, т.е. куда двигается лифт. Если лифт едет вверх, то отмечаемся на следующем этаже (h++; a[h]=1). Если лифт едет вниз, то отмечаемся на нижнем этаже (h--; a[h]=1). Получается, что на тех этажах, на которых мы были, стоят единички. Затем в цикле от 0 до 202 считаем кол-во единиц. Это и есть искомое число этажей.
Левая рекурсия
В теории формальных грамматик и автоматов (ТФГиА) важную роль играют так называемые контекстно-свободные грамматики (КС-грамматики). КС-грамматикой будем называть четверку, состоящую из множества N нетерминальных символов, множества T терминальных символов, множества P правил (продукций) и начального символа S, принадлежащего множеству N.
Каждая продукция p из P имеет форму A –> a, где A нетерминальный символ (A из N), а a – строка, состоящая из терминальных и нетерминальных символов. Процесс вывода слова начинается со строки, содержащей только начальный символ S. После этого на каждом шаге один из нетерминальных символов, входящих в текущую строку, заменяется на правую часть одной из продукций, в которой он является левой частью. Если после такой операции получается строка, содержащая только терминальные символы, то процесс вывода заканчивается.
Во многих теоретических задачах удобно рассматривать так называемые нормальные формы грамматик. Процесс приведения грамматики к нормальной форме часто начинается с устранения левой рекурсии. В этой задаче мы будем рассматривать только ее частный случай, называемый непосредственной левой рекурсией. Говорят, что правило вывода A –> R содержит непосредственную левую рекурсию, если первым символом строки R является A.
Задана КС-грамматика. Требуется найти количество правил, содержащих непосредственную левую рекурсию.
Алгоритм решения:
Вводим количество строк, в цикле от 1 до n включительно вводим n строк. Дальше считаем количество строк в которых нулевой элемент совпадает с третим.
