воскресенье, 12 ноября 2017 г.

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

Пиріжки
Пиріжок у шкільній їдальні коштує a гривень та b копійок. Знайдіть скільки гривень та копійок заплатить Петрик за пиріжків.
Вхідні дані: Три натуральних числа abn (0 ≤ a,bn ≤ 100).
Вихідні дані: Через пропуск два числа: вартість покупки у гривнях та копійках.
Вхідні дані
1 25 2
Вихідні дані
2 50
static void Main(string[] args)
        {
                string s = Console.ReadLine();
                var massiv = s.Split(' ');
                int a = int.Parse(massiv[0]);
                int b = int.Parse(massiv[1]);
                int n = int.Parse(massiv[2]);
                Console.WriteLine("{0} {1}", (100 * a + b) * n / 100, (100 * a + b) * n % 100);          
        }

Ділення на нуль чи...

Як відомо, ділити на нуль не можна. А може ще на щось ділити не можна? Саме це Вам і потрібно вияснити.
Вхідні дані
У єдиному рядку задано два цілих знакових 32-бітних числа а та b.
Вихідні дані
Виведіть значення частки, отриманої в результаті ділення а на b. Якщо ділення виконати неможливо, вивести ERROR.
Вхідні дані
Sample 1
6 0

Sample 2
8 4
Вихідні дані
Sample 1
ERROR

Sample 2
2
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            long a = long.Parse(massiv[0]);
            long b = long.Parse(massiv[1]);
            if (b == 0) Console.WriteLine("ERROR");
            else Console.WriteLine(a / b);
        }

IP-адреса

Для того, щоб виходити в Інтернет, кожному комп'ютеру присвоюється так звана IP-адреса. Вона складається з чотирьох цілих чисел у діапазоні від 0 до 255, відокремлених крапками. У наступних трьох рядках показано три правильні IP-адреси:
127.0.0.0
192.168.0.01
255.00.255.255
Напишіть програму, яка визначає, чи є заданий рядок правильною IP-адресою.
Вхідні дані
На вхід програмі подається рядок довжиною не більше 15 символів, який включає цифри та рівно три крапки.
Вихідні дані
Якщо рядок є правильною IP-адресою, необхідно вивести 1, інакше 0.
Вхідні дані
127.0.0.1
Вихідні дані
1
        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split('.');
            int a = massiv[0] == "" ? -1 : int.Parse(massiv[0]);
            int b = massiv[1] == "" ? -1 : int.Parse(massiv[1]);
            int c = massiv[2] == "" ? -1 : int.Parse(massiv[2]);
            int d = massiv[3] == "" ? -1 : int.Parse(massiv[3]);
            if (a < 0 || a > 255) Console.WriteLine(0);
            else
            {
                if (b < 0 || b > 255) Console.WriteLine(0);
                else
                {
                    if (c < 0 || c > 255) Console.WriteLine(0);
                    else
                    {
                        if (d < 0 || d > 255) Console.WriteLine(0);
                        else Console.WriteLine(1);
                    }
                }
            }
        }

Мозаїка

У Петі є n квадратних карток. Він хоче скласти з них один великий квадрат (без пустот). Скільки карток у нього залишиться?

Вхідні дані

Натуральне число n (1 ≤ n ≤ 109).

Вихідні дані

Вивести кількість карток, що залишились.
Вхідні дані #1
1
Вихідні дані #1
0
static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int k = (int)Math.Sqrt(n);
            Console.WriteLine(n - k * k);
        }
Календар
Маленький Никифор постійно забуває, скільки йому років. Тому його батьки повісили у його кімнаті календар, де спеціально відмічено день народження Никифора. Проте порахувати, скільки ж йому років, за датою народження та поточною датою Никифор сам не вміє. Допоможіть йому!
Вхідні дані
У першому рядку вхідного файлу задано три натуральних числа: день, місяць і рік, коли народився Никифор. У другому рядку задано поточну дату у тому ж форматі. Роки в обох датах не перевищують 105 і гарантується, що дата народження Никифора строго раніше поточної дати.
Вихідні дані
У вихідний файл виведіть одне число - вік Никифора.
Вхідні дані
12 4 2003
17 7 2010
Вихідні дані
7
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int d1 = int.Parse(massiv[0]);
            int m1 = int.Parse(massiv[1]);
            int y1 = int.Parse(massiv[2]);

            s = Console.ReadLine();
            massiv = s.Split(' ');
            int d2 = int.Parse(massiv[0]);
            int m2 = int.Parse(massiv[1]);
            int y2 = int.Parse(massiv[2]);

            int yash = y2 - y1;
            if (m2 < m1 || (m1 == m2 && d2 < d1)) yash--;
            Console.WriteLine(yash);
        }
Кількість інформації
При вивченні теми "Кількість інформації" часто доводиться розв'язувати рівняння 2I=N (N відомоI необхідно знайти). Семикласники не знають логарифмів, тому розв'язують задачу так: якщо корінь цілий - він є відповіддю. Якщо ж ні, то у розв'язку вказується два цілих числа, найближчі до кореня.
Вхідні дані
Натуральне число N (N < 1000000000).
Вихідні дані
Розв'язок (див. приклад виведення у прикладах).
Приклади вхідних даних
Приклади вихідних даних
4
I=2
5
2

  static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            double x = Math.Log(n, 2);
            int y = (int)x;
            if (x == y) Console.WriteLine("I=" + y);
            else Console.WriteLine(y + " + (y + 1));
        }

Кількість чисел Фібоначчі

Послідовність Фібоначчі - це така послідовність, у якій кожен елемент дорівнює сумі двох попередніх, за винятком перших двох елементів F1 = 1F2 = 1Fn = Fn-2 + Fn-1.
1 1 2 3 5 8 13 21 …
Дано масив цілих чисел серед яких можливі числа Фібоначчі. Підрахувати кількість чисел Фібоначчі – в даному наборі чисел.
Вхідні дані
У першому рядку записано число k - кількість чисел, у наступному рядку записано k чисел a1a2, …, ak (0 < ≤ 10001 ≤ ai < 263).
Вихідні дані
Ввести одне число - кількість чисел Фібоначчі.
Вхідні дані
5
1 3 5 6 13
Вихідні дані
4
static void Main(string[] args)
        {
            List<ulong> siyahi = new List<ulong> { 1, 1 };
            ulong[] fib = new ulong[100];
            fib[1] = 1;
            fib[2] = 1;
            for (int i = 3; i < 100; i++)
            {
                fib[i] = fib[i - 1] + fib[i - 2];
                siyahi.Add(fib[i]);
            }
            int k = int.Parse(Console.ReadLine());
            int say = 0;
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            for (int i = 0; i < k; i++)
            {
                if (siyahi.Contains(ulong.Parse(massiv[i]))) say++;
            }
            Console.WriteLine(say);
        }

Послідовність Фібоначчі
Послідовність Фібоначчі задано так:
  • a0 = 0
  • a1 = 1
  • ak = ak-1 + ak-2
Для заданого n знайти значення n-го елемента an послідовності Фібоначчі.
Вхідні дані
Єдине натуральне число N (1 ≤ N ≤ 40).
Вихідні дані
N-ий елемент послідовності Фібоначчі.
Вхідні дані
Sample 1
2

Sample 2
5

Sample 3
8
Вихідні дані
Sample 1
1

Sample 2
5

Sample 3
21

static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] fib = new int[n + 1];
            fib[0] = 0;
            fib[1] = 1;
            for (int i = 2; i <= n; i++)
            {
                fib[i] = fib[i - 1] + fib[i - 2];
            }
            Console.WriteLine(fib[n]);
        }

Точка і прямокутник

Визначте, чи належить точка (XY) прямокутнику з кінцями діагоналі (X1Y1X2Y2) і сторонами, паралельними координатним осям?

Вхідні дані

Шість дійсних чисел XYX1Y1X2Y2 - координати точки та координати кінців діагоналі прямокутника, відповідно. Числові значення по модулю не перевищують 100.

Вихідні дані

Вивести 1, якщо точка належить прямокутнику, або 0, якщо ні.
Вхідні дані
1 2 3 4 0 0
Вихідні дані
1
static void Main(string[] args)
        {
            string setir = Console.ReadLine();
            var massiv = setir.Split(' ');
            double x = double.Parse(massiv[0]);
            double y = double.Parse(massiv[1]);
            double x1 = double.Parse(massiv[2]);
            double y1 = double.Parse(massiv[3]);
            double x2 = double.Parse(massiv[4]);
            double y2 = double.Parse(massiv[5]);
            double minX = Math.Min(x1, x2);
            double minY = Math.Min(y1, y2);
            double maxX = Math.Max(x1, x2);
            double maxY = Math.Max(y1, y2);
            if (minX <= x && x <= maxX && minY <= y && y <= maxY) Console.WriteLine(1);
            else Console.WriteLine(0);
        }

Клітинки в колі

На аркуші паперу в клітинку намальовано коло з радіусом R і з центром на перетині ліній клітинок. Скільки повних клітинок міститься у даному колі.

Вхідні дані

В єдиному рядку записано одне ціле невід'ємне число R - радіус кола. 0 ≤ R ≤ 1000.

Вихідні дані

Одне число - кількість цілих клітинок.
Вхідні дані
2
Вихідні дані
4
static void Main(string[] args)
        {
            double r=double.Parse(Console.ReadLine());
            int answer = 0;
            for (double x = 1; x < r; x = x + 1)
                answer += (int)Math.Sqrt(r * r - x * x);
            answer *= 4;
            Console.WriteLine(answer);
        }
Трикутник
Визначте, чи можна отримати два трикутники з заданими довжинами сторін, розрізавши деякий прямокутник одним розрізом і вільно обертаючи і перевертаючи отримані куски.

Вхідні дані

Cкладається  з двох рядків. Перший рядок містить три натуральних числа - довжини сторони першої трикутника. Друга рядок містить три натуральних числа - довжини сторони другого трикутника. Відомо, що трикутники є коректними. Всі довжини сторін не більше 100.

Вихідні дані

Зведіть, чи існує прямокутник, який можна було б розрізати на трикутники з заданими довжинами сторін. Якщо такий прямокуник існує, виведіть ТАК. В противному випадку виведіть НІ.

Пусть a, b, c – длины сторон первого треугольника, d, e, f – длины сторон второго треугольника. Отсортируем стороны треугольников так чтобы выполнялись неравенства abc и def. Из двух треугольников можно сложить прямоугольник только если их соответствующие стороны попарно равны (a = d, b = e, c = f) и если оба треугольника являются прямоугольными (a2 + b2 = c2, d2 + e2 = f2).
  static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int a = int.Parse(massiv[0]);
            int b = int.Parse(massiv[1]);
            int c = int.Parse(massiv[2]);
            string ss = Console.ReadLine();
            var massiv1 = ss.Split(' ');
            int d = int.Parse(massiv1[0]);
            int e = int.Parse(massiv1[1]);
            int f = int.Parse(massiv1[2]);
            int t;
            if (a > c) { t = a; a = c; c = t; }

            if (b > c) { t = b; b = c; c = t; }
            if (a > b) { t = a; a = b; b = t; }
            if (d > f)  {t = d; d = f; f = t; }
            if (e > f)  {t = e; e = f; f = t; }
            if (d > e)  {t = d; d = e; e = t; }
            Console.WriteLine((a == d && b == e && c == f && a * a + b * b == c * c ? "YES\n" : "NO\n"));
            Console.ReadKey(true);
        }


Комментариев нет:

Отправить комментарий