1. Основные понятия Основные функции обработки строк Посимвольная обработка строки Формирование массива слов строки Формирование строки из массива слов Слова-палиндромы Выделение чисел из строки Сравнение строк Обработка многострочного текста...30 Приложение Приложение Приложение Список литературы...37
2 2 1. Основные понятия Строка это некоторый набор символов, в том числе и пустой. Для обозначения строки используются кавычки ("). Пустая строка обозначается парой кавычек, между которыми нет ни одного символа, в том числе и пробела (s =""). Строки описываются с типа String. Каждая строка может содержать до двух миллиардов символов в формате Unicode. Объем памяти, занимаемой строковой переменной, зависит от количества символов в этой строке. Чем больше символов, тем больше памяти требуется для хранения этой строки. Число символов в строке называется длиной строки. Длина пустой строки равна нулю. Все символы в строке последовательно пронумерованы. Нумерация идет слева направо и начинается с единицы. Номер символа в строке также называют позицией символа. Подстрока это любой фрагмент строки, состоящий хотя бы из одного символа исходной строки. Например, в строке "электростанция" содержится подстрока "рост". Левой подстрокой называется такая подстрока, которая начинается с первого символа исходной строки. В нашем случае левой подстрокой будет "элек". Правая подстрока это подстрока, которая заканчивается последним символом исходной строки. В нашем примере это будет подстрока "станция". Конкатенацией двух строк s1 и s2 называется строка s, для которой s1 является левой подстрокой, s2 правой подстрокой, а длина строки s равна сумме длин строк s1 и s2. Часто конкатенацию называют сложением или склейкой строк. В Visual Basic 2005 она обозначается знаком плюс. s = s1 + s2 1 Строковое выражение это либо отдельная строка, либо строка и строковое выражение, между которыми стоит знак конкатенации. 2. Основные функции обработки строк Strings.Len(Строка) возвращает количество символов в строке, то есть ее длину. Например, Strings.Len("Окно") вернет значение 4. 1 Также допускается следующая запись конкатенации. s = s1 & s2
3 3 Strings.Left(Строка, Длина) выделяет левую подстроку указанной Длины из заданной Строки. Например, Strings.Left("Пароход", 3) вернет строку "Пар". Strings.Right(Строка, Длина) выделяет правую подстроку указанной Длины из заданной Строки. Например, Strings.Right("Пароход", 3) вернет строку "ход". Strings.Mid(Строка, Позиция, Длина) выделяет подстроку заданной Длины из исходной Строки, начиная с указанной Позиции. Например, Strings.Mid("Пароход", 2, 4) вернет строку "арох". Параметр Длина может отсутствовать. В этом случае функция Strings.Mid возвращает правую подстроку, которая начинается с заданной Позиции. Например, Strings.Mid("Пароход", 4) вернет строку "оход". Функция Mid может стоять не только справа от знака присваивания, но и слева. В этом случае префикс Strings не ставится. Если функция Mid стоит слева от знака присваивания, то соответствующая подстрока исходной Строки будет заменена на значение строкового выражения, стоящего в правой части оператора присваивания. При этом длина исходной строки не меняется. Примеры: 1. s = "Иванов" Mid(s, 1, 4) = "Петр" После выполнения оператора присваивания в переменную s будет записано "Петров". То есть первые четыре символа исходной строки будут заменены на четыре символа из другой строки. 2. s = "Иванов" Mid(s, 1, 4) = "Пят" После выполнения оператора присваивания в переменную s будет записано "Пятнов". Так как во второй строке всего три символа, то в исходной строке будут изменены только первые три символа, а четвертый останется неизменным. 3. s = "Иванов" Mid(s, 1, 3) = "Александр" После выполнения оператора присваивания в переменную s будет записано "Аленов". Первые три символа исходной строки меняются на
4 4 первые три символа второй строки. Остальная часть второй строки в преобразовании не участвует.
Объяснение:
#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
Поделитесь своими знаниями, ответьте на вопрос:
мах сумма будет 9*4=36
мах произ-ие 9*9*9*9=6561
невозрастание это убывание или равенство
Число 63
разделим его на 2 числа, т.к. вычисляются 2 числа. Получаем 6 и 3.
6 и 3 - убывание
1) Предположим, что 6-произведение, а 3-сумма, тогда
6=2*3*1*1 (4 числа, т.к. по условию у нас 4-хзначное число), но тогда 3=2+3+1+1. Значит неправильное предположение.
2) 3-произведение, а 6-сумма, тогда
3=3*1*1*1, а 6=3+1+1+1. Все сходится.
Вывод: число 63 нам подходит.
Число 89.
числа 8 и 9. возрастание.
Вывод: не подходит
Число 98
9 и 8. убывание
1) Начнем с того, что 9-произведение, а 8- сумма
9=3*3*1*1, 8=3+3+1+1
Вывод: подходит
Число 200.
20 и 0. И никак иначе. Т.к. чисел 2 и 00 быть не может. убывание
1) 0-логично, что это пр-ие, т.к. суммой быть не может, значит
20-сумма
20=9+9+2+0
Вывод: подходит
Число 291.
числа 29 и 1, т.к. только так у нас будет убывание.
1) 1 суммой быть не может. 29-сумма, однако если 1-пр-ие, то только 1=1*1*1*1, но 29≠1+1+1+1
Вывод: не подходит
Число 1311
только 13 и 11
ни 13 ни 11 не могут быть пр-ием, т.к. умножаться и складываться могут только числа от 0 до 9
Вывод: не подходит
Число 656136.
Видно, что мы можем поделить его на 6561 и 36. убывание.
Оба числа-максимумы, значит
Вывод: подходят
Число 756423.
Одно из чисел не может быть больше 36, а также порядок невозрастания должен соблюдаться.
Значит 7564 и 23. Одно из чисел все равно не входит в мах, значит
Вывод: не подходит
ответ:4
P.S. Фух, это было трудно, но надеюсь, что