четверг, 3 января 2019 г.

C#

Лифт

Чтобы поднять на N-й этаж M-этажного дома новый холодильник, Витя вызвал бригаду грузчиков. Оплата работы грузчиков производится так: за подъем холодильника на один этаж требуется заплатить 200 рублей, за спуск на один этаж - 100 рублей. За подъем и спуск на лифте плата не взимается. Несмотря на то, что в Витином доме есть лифт, ему возможно все же придется заплатить грузчикам, поскольку лифт останавливается только на каждом K-м этаже, начиная с первого (то есть на этажах с номерами 1K+12K+13K+1, ...). Требуется вычислить, какой минимальной суммы денег достаточно, чтобы грузчики доставили холодильник с первого этажа на N-й.
Входные данные
Во входном файле записаны три числа: M (2 ≤ M ≤ 100), N (2 ≤ N ≤ M) и K (2 ≤ K ≤ M-1), разделенные пробелами.
Выходные данные
Выведите одно число - минимальную стоимость подъема холодильника.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані
Sample 1
20 7 4

Sample 2
20 7 2
Вихідні дані
Sample 1
200

Sample 2
0

public static void Main(string[] args) { string setir = Console.ReadLine(); var massiv = setir.Split(' '); int m = int.Parse(massiv[0]); int n = int.Parse(massiv[1]); int k = int.Parse(massiv[2]); int c = ((n - 1)/k)*k + 1; int min = (n - c)*200; if (c + k <= m) min = Math.Min(min, (c + k - n)*100); Console.WriteLine(min); }

Паліндром

Паліндром - це рядок, який однаково читається зліва направо і зправа наліво. Складіть програму, яка перевіряє, чи є заданий текст паліндромом. Не забудьте, що при читанні пропуск ніяк не вимовляється.

Вхідні дані

Рядок S (|S| ≤ 255) складається з рядкових латинських літер і пропусків. Під |S| розуміється довжина рядка.

Вихідні дані

Вивести "YES", якщо текст є паліндромом та "NO" інакше.
Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
palindrom
Вихідні дані #1
NO
Вхідні дані #2
a roza upala na lapu azora
Вихідні дані #2
YES

private static string Gu(string x) { string y = ""; int len = x.Length; for (int i = 0; i < len; i++) y = x[i] + y; return y; } public static void Main(string[] args) { string s = Console.ReadLine(); s = s.Replace(" ", ""); Console.WriteLine(s == Gu(s) ? "YES" : "NO"); } }

Площа чотирикутника

Визначити площу чотирикутника з вершинами A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4).

Вхідні дані

В одному рядку задано координати послідовних вершин чоторикутника. Всі числа цілі та не перевишують за модулем 100.

Вихідні дані

Вивести площу чотирикутника, округлену до цілих.
Вхідні дані
1 4 5 4 4 2 2 1
Вихідні дані
8

var x1,y1,x2,y2,x3,y3,x4,y4: Integer; s: Real;
begin
  readln(x1,y1,x2,y2,x3,y3,x4,y4);
  s:=0.5*Abs((x1*y2-y1*x2)+(x2*y3-y2*x3)+(x3*y4-y3*x4)+(x4*y1-y4*x1));
  writeln(s:0:0);
end.



Степеневі числа

Число n називається степеневим, якщо його можна отримати з деякого числа множенням на себе хоча б один раз. Наприклад, 4 степеневе число, оскільки 4 = 2 · 227 також степеневе число, бо 27 = 3 · 3 · 3, а 28 не є степеневим числом. Визначити, чи є задані числа степеневими.

Вхідні дані

У першому рядку записано одне натуральне число n - кількість досліджуваних чисел (1 ≤ n ≤ 10). У другому рядку через пропуск записано nчисел - досліджувані числа. Кожне з них більше 1 і менше 109.

Вихідні дані

Вивести n рядків. В i-му рядку записати YES, якщо i-те число є степеневим і NO у противному випадку.
public static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); string setir = Console.ReadLine(); var massiv = setir.Split(' '); int max = 0; int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = int.Parse(massiv[i]); if (a[i] > max) max = a[i]; } HashSet<long> siyahi = new HashSet<long> {1}; int log = (int) Math.Log(max, 2) + 1; int kok = (int) Math.Sqrt(max) + 1; for (int i = 2; i < kok; i++) { for (int j = 2; j < log; j++) { long cari = (long) Math.Pow(i, j); if (cari <= max && !siyahi.Contains(cari)) siyahi.Add(cari); } } for (int i = 0; i < n; i++) { Console.WriteLine(siyahi.Contains(a[i]) ? "YES" : "NO"); }

Стовбці

Задано таблицю n × n, заповнену цілими числами. Петро Перший вважає стовбець хорошим, якщо той містить число x. Потрібно для кожного стовбця вияснити, чи є той хорошим.

Вхідні дані

У першому рядку задано число x, яке не перевищує по модулю 2 *109. У другому рядку задано число n (1 ≤ n ≤ 100). Кожен з наступних nрядків містить по n цілих чисел, що не перевищують за модулем 2 *109 - числа у комірках таблиці.

Вихідні дані

Для кожного стовбця в окремому рядку виведіть YES, якщо в ньому є число x, і NO у протилежному випадку.
Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
1
2
0 1
0 0
Вихідні дані #1
NO
YES
 private static string Yo(int[,] a, int j, int x)
        {
            int n = (int) Math.Sqrt(a.Length);
            for (int i = 0; i < n; i++)
            {
                if (a[i, j] == x) return "YES";
            }
            return "NO";
        }

        public static void Main(string[] args)
        {
            int x = int.Parse(Console.ReadLine());
            int n = int.Parse(Console.ReadLine());
            int[,] a = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                string setir = Console.ReadLine();
                var massiv = setir.Split(' ');
                for (int j = 0; j < n; j++) a[i, j] = int.Parse(massiv[j]);
            }
            for (int j = 0; j < n; j++) Console.WriteLine(Yo(a, j, x));
        }


среда, 26 декабря 2018 г.

Олімпіадні задачі

Квадратний корінь

Знайдіть таке число x, що x2 + SQRT(x) = C з точністю не менше 6 знаків після крапки. Через SQRT(x) позначено корінь квадратний числа x.

1206

f91

МакКарті - відомий теоретик комп'ютерних наук. У одній зі своїх праць він визначив рекурсивну функцію f91, яка визначена для довільного натурального числа n наступним чином:
Якщо n ≤ 100, то f91(n) = f91(f91(n + 11));
Якщо n ≥ 101, то f91(n) = n - 10.
Вхідні дані
Натуральне число n, не більше за 1000000.
Вихідні дані
Значення f91(n).
Вхідні дані
Sample 1
500

Sample 2
91
Вихідні дані
Sample 1
490

Sample 2
91

Прямокутник

prb7379Знаючи координати трьох вершин прямокутника на координатній площині, визначити координати четвертої вершини.
Вхідні дані: В одному рядку записані шість чисел – координати трьох вершин прямокутника. Числові значення цілі, по модулю не більші 100.
Вихідні дані: Два цілих числа - координати четвертої вершини прямокутника.
Вхідні дані
-2 3 4 3 4 -1 
Вихідні дані
-2 -1

Подсчитать буквы

Задана строка s и буква c. Сколько раз буква встречается в строке?

Входные данные

Первая строка содержит строку s с не более чем 100 символами. Вторая строка содержит прописную букву латинского алфавита c.

Выходные данные

Выведите сколько раз буква c встречается в строке s. Одна и та же заглавная и прописная буква считаются одинаковыми. То есть'a' и 'A' считаются одинаковыми буквами.

Четные отрицательные в матрице

Задана матрица размера n * n. Найдите количество и сумму ее четных отрицательных чисел.

Входные данные

Первая строка содержит число n (1 ≤ n ≤ 100). Следующие строки содержат матрицу n * n. Элементы матрицы по модулю не больше 100.

Выходные данные

Выведите в одной строке количество и сумму четных отрицательных чисел в матрице.
Вхідні дані #1
3
4 -2 5
1 -4 -12
0 1 -3

Модуль максимального

Задана послідовність дійсних чисел. Обчислимо їх модулі. Знайдіть максимальне значення серед цих модулей.

Вхідні дані

У першому рядку задано кількість елементів n (n ≤ 100) у послідовності. У наступному рядку задано n дійсних чисел - елементи послідовності, значення яких не первищують за модулем 100.

Вихідні дані

Виведіть максимальне значення серед цих модулей з 2 десятковими знаками.
Вхідні дані #1
5
6 7.5 2.1 2.0 0

Вихідні дані #1
7.50

Турнір

Два гравці влаштували між собою турнір з дартсу. Турнір являє собою серію, яка складається з n ігор. У кожній грі учасники виконують деяку кількість кидків, набираючи очки. Гра вважається виграною тим з гравців, який набрав у ній очок більше, ніж суперник. Якщо ж гравці набрали порівну очок у грі, то її результат вважається нічийним. Пореможцем турніру оголошується той, хто отримав більше всього перемог.
Напишіть програму, яка визначить переможця турніру.

Вхідні дані

У першому рядку задано натуральне число n (1 ≤ n ≤ 1000) - кількість ігор у турнірі. У кожному з наступних n рядків задаються по два числа - кількість очок, набраних першим та другим гравцем відповідно. Усі числа є невід'ємними цілими, які не перевищують 1000.

Вихідні дані

Виведіть число 1, якщо переможцем турніру є перший гравець, 2 - у випадку перемоги другого гравця, і 0 - якщо турнір не виявив переможця.
Вхідні дані #2
2
1 1
0 5
Вихідні дані #2
2

Довга сума

Задано два цілих невід'ємних числа: m і n. Знайти їх суму.

Вхідні дані

У першому рядку міститься m, у другому n (0 ≤ mn < 1030000).

Вихідні дані

Вивести суму без пропусків і ведучих нулів.

Стойкое число

По числу x определим p(x) как произведение его цифр. Рассмотрим последовательность xp(x), p(p(x))... Стойкостью x назовем индекс (начиная с 0) первого однозначного числа в этой последовательности. Например, из 99 получим последовательность 999 * 9 = 818 * 1 = 8. Стойкость числа 99 равна 2. По заданному числу n определите его стойкость.

Входные данные

Каждая строка содержит одно целое число n (0 ≤ n ≤ 2 * 109).

Выходные данные

Для каждого значения n выведите в отдельной строке его стойкость.
Вхідні дані #1
99
268
6
Вихідні дані #1
2
4
0

Затятий колекціонер метеликів

Як відомо, Андрій Сергійович - затятий колекціонер метеликів. Він має величезну колекцію, експонати якої зібрані зі всього світу. Будемо вважати, що в світі існує 2000000000 видів метеликів.
Щоб не заплутатися, Андрій Сергійович присвоїв кожному виду унікальний номер. Нумерація метеликів завжди починається з одиниці. Тепер він хоче знати, чи є метелик з видом k у його колекції, або ж метелика доведеться добувати, витрачаючи безліч сил і грошей.

Вхідні дані

У першому рядку міститься кількість видів метеликів n (1 ≤ n ≤ 100000) у колекції Андрія Сергійовича. У наступному рядку знаходяться nупорядкованих за зростанням чисел - номери видів метеликів у колекції. Всі види метеликів у колекції мають різні номери.
У третьому рядку записано кількість видів метеликів m (1 ≤ m ≤ 100000), про яких Андрій Сергійович хоче дізнатися, чи є вони у нього в колекції або ж ні. В останньому рядку містяться m чисел - номери видів метеликів, наявність яких необхідно перевірити.

Вихідні дані

Вивести m рядків. Для кожного запиту виведіть "YES", якщо метелик із заданим номером міститься у колекції, і "NO" у протилежному випадку.
Вхідні дані #1
7
10 47 50 63 89 90 99
4
84 33 10 82
Вихідні дані #1
NO
NO
YES
NO

вторник, 4 декабря 2018 г.

1


Чотиризначне число називається числом Армстронга, якщо сума четвертого ступеня його цифр рівна самому числу. Наприклад 8208 = 84 + 24 + 04 + 84 є чисел Армстронга. Виведіть всі числа Армстронга від а до б.

Вхідні дані
Два цілих числа a та b (1000 ≤ a ≤ b ≤ 9999).

Вихідні дані
Виведіть в одному рядку всі числа Армстронга від а до б.

Підрахуйте, скільки міститься у файлі символів, строк и слів.

вторник, 6 ноября 2018 г.

Задачі

Визначити, чи є рядок паліндромом.

Паліндром - це число, слово або фраза, однаково читаються в обох напрямки.
Опис змінних:

s - рядок;
f - прапор.

Алгоритм рішення задачі:

Брати черговий символ з початку рядка і порівнювати його з протилежним.
Якщо символи не рівні, то видати повідомлення "не паліндром", змінити значення прапора і зупинити порівняння.
Якщо значення прапора не було змінено, то видати повідомлення "паліндром".


В одновимірному масиві знайти мінімальний і максимальний елементи. Обчислити їх різницю.

Наприклад, дано масив [3, 5, 9, 4, 2, 6]. Максимальним числом є 9, мінімальним є 2. Різниця становить 9-2 = 7.
В даному випадку мінімум і максимум можна шукати за індексом і за значенням.

Розглянемо спочатку пошук за значенням: нехай в змінні min і max записуються відповідно значення мінімального і максимального елементів. До циклу їм треба привласнити такі значення, які виходять за межі діапазону масиву. При цьому змінна max повинна отримати значення, що виходить за нижню межу (менше можливого), а min - за верхню межу (більше можливого).

Будемо в циклі перебирати елементи масиву і порівнювати їх значення з min і max. Якщо черговий елемент більше max, то дамо його значення змінної max. Якщо менше значення змінної min, то дамо min. При цьому якщо перша умова "спрацювало", то нема чого перевіряти друге. Тому слід використовувати else, в яке вкладено другий if.

Після циклу, щоб відповісти на питання завдання, треба з max відняти min. Результат вивести на екран.
В одновимірному масиві видалити всі парні елементи і залишити тільки непарні.

Скопіювати в інший масив тільки непарні елементи.
З натурального числа видалити задану цифру. Число і цифру вводити з клавіатури.

Наприклад, задано число 5683. Потрібно видалити з нього цифру 8. Вийде число 563.
Завдання ускладнюється тим, що заздалегідь невідомо кількість розрядів числа. Тому вихідне число простіше почати перевіряти з кінця за допомогою оператора mod (знаходження залишку від ділення). Ділити треба на 10, щоб отримати останню цифру числа.

Якщо остання цифра не збігається з цифрою, яку потрібно видалити, то її треба перенести в інше число, перед цим зсунувши його розряди. Легше реалізувати, щоб нове число формувалося навпаки: старші розряди вихідного будуть молодшими.

Після того, як задана цифр буде видалена, число знову перевертається.

четверг, 25 октября 2018 г.

E-olymp C#

1024
РОБИМО САМОСТІЙНО

4805

Равносторонний треугольник

Найдите периметр и площадь равностороннего треугольника.

Входные данные

Одно целое число - длина стороны n (1 ≤ n ≤ 1000) равностороннего треугольника.

Выходные данные

Выведите в одной строке периметр и площадь равностороннего треугольника с 4 десятичными знаками
Вхідні дані #2
8
Вихідні дані #2
24.0000 27.7128


8321

Послідовність - 1

Вивести на екран послідовність чисел. Рахуємо, що n - номер варіанту.
n=1 : 0 1 2 3 4 5 6 7 8 9
n=2 : 1 2 3 4 5 6 7 8 9 10
n=3 : 2 4 6 8 10 12 14 16 18 20
n=4 : 1 3 5 7 9 11 13 15 17 19
n=5 : 5 10 15 20 25 30 35 40 45 50
n=6 : 9 8 7 6 5 4 3 2 1 0

Вхідні дані

Одне число n, 1 ≤ n ≤ 6

Вихідні дані

Виведіть числа послідовності

8322
РОБИМО САМОСТІЙНО


8532

Печать квадратов и кубов

Заданы два целых числа a и b. Выведите квадраты и кубы всех целых чисел от a до b включительно.

Входные данные

Два целых числа a и b (0 ≤ a ≤ b ≤ 10000).

Выходные данные

В первой строке выведите квадраты всех целых чисел от a до b включительно по возрастанию. Во второй строке выведите кубы всех целых чисел от a до b включительно по убыванию.
Вхідні дані #1
5 10
Вихідні дані #1
25 36 49 64 81 100 
1000 729 512 343 216 125 


271

Факторіал!

Знайти значення факторіалу цілого числа n.

Вхідні дані

Одне ціле число n (0 ≤ n ≤ 3000).

Вихідні дані

Виведіть факторіал числа n.
8609

Рекурсия - 1

Реализуйте рекурсивную функцию:
prb8609.gif

Входные данные

Одно целое число n (0 ≤ n ≤ 1000).

Выходные данные

Выведите значение f(n).
Вхідні дані #1
5
Вихідні дані #1
15
2292

Число Фібоначчі

Визначимо числа Фібоначчі наступним чином:
F (1) = F (2) = 1
F (n) = F (n - 1) + F (n - 2) для n ≥ 3.
Обчислити n-те число Фібоначчі.

Вхідні дані

У першому рядку задано кількість тестів t (1 ≤ t ≤ 103). У кожному з наступних t рядків міститься одне число n (1 ≤ n ≤ 104).

Вихідні дані

Для кожного тесту виведіть в окремому рядку відповідне число Фібоначчі.
Вхідні дані #1
5
1
2
3
4
5
Вихідні дані #1
1
1
2
3
5

II спосіб

    public static BigInteger Fib(BigInteger n)
        {
            if (n == 0)
            {
                return 0;
            }
            if (n == 1)
            {
                return 1;
            }
            if (n == 2)
            {
                return 1;
            }

            else
            {
                return Fib(n - 1) + Fib(n - 2);
            }
        }
        static void Main(string[] args)
        {

            string s = Console.ReadLine();
            var m = s.Split(' ');
            int t = int.Parse(m[0]);

            
            int[] indeks = new int[t];
            
            for (int i = 0; i < t; i++)
            {
                indeks[i] = int.Parse(Console.ReadLine());
                Console.WriteLine(Fib(indeks[i]));
            }


948

Площа та об`єм піраміди

Сторона основи правильної чотирикутної піраміди d, бічне ребро p. Визначити площу повної поверхні та об'єм піраміди.
    Вхідні дані
    У єдиному рядку через пропуск основа та бічне ребро. Вхідні дані не перевищують 100.
    Вихідні дані
    Через пропуск шукані площа та об'єм, результат вивести з точністю до тисячних.
    Вхідні дані #1
    20 15
    
    Вихідні дані #1
    847.214 666.667
    4718
    Напишіть програму, яка вітає користувача, виводячи слово Hello, ім'я користувача та розділові знаки у наступному вигляді: Hello, Harry
    Вхідні дані
    У єдиному рядку вводиться ім'я користувача.
    Вихідні дані
    У першому рядку виведіть привітання.
    Вхідні дані
    Sample 1
    Harry
    
    Sample 2
    Peter
    
    Вихідні дані
    Sample 1
    Hello, Harry
    
    Sample 2
    Hello, Peter
    
    
    1607

    Число у зворотньому порядку

    Записати ціле невід'ємне число n у зворотньому порядку.

    Вхідні дані

    Одне ціле невід'ємне 64-х розрядне число.

    Вихідні дані

    Запис числа у зворотньому порядку.
    Вхідні дані #1
    1234
    
    Вихідні дані #1
    4321