вторник, 24 октября 2017 г.

C#

Прибирання території

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

Вхідні дані

У єдиному рядку задано два числа n та m (0 < nm ≤ 216).

Вихідні дані

Виведіть одне число - відповідь на поставлену задачу.
Вхідні дані #1
2 1
Вихідні дані #1
1

  private static long EBOB(long x, long y)
        {
            while (x * y != 0)
            {
                if (x < y) y = y % x;
                else x = x % y;
            }
            return x + y;
        }

        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            long n = long.Parse(massiv[0]);
            long m = long.Parse(massiv[1]);
            Console.WriteLine(EBOB(n, m));
        }
Номери будинків
З'ясувати, чи знаходяться будинки з номерами n та m на одній стороні вулиці.

Вхідні дані

Значення n та m (1 ≤ nm ≤ 100).

Вихідні дані

Вивести 1, якщо будинки з номерами n та m знаходяться на одній стороні вулиці та 0 у протилежному випадку.
Вхідні дані #1
1 2
Вихідні дані #1
0
static void Main(string[] args)
        {
            string setir = Console.ReadLine();
            var massiv = setir.Split(' ');
            int n = int.Parse(massiv[0]);
            int m = int.Parse(massiv[1]);
            Console.WriteLine((n + m) % 2 == 0 ? 1 : 0);
        }
Не A+B
Журі захотіло запропонувати задачу на знаходження суми двох чисел. Але в результаті магнітної бурі у перевіряючій програмі щось злімалось. Усю нічь програмний комітет намагався зрозуміти, що відбулось, і, нарешті, зрозумів. Тепер перовіряюча програма плутає вердикти, тобто замість "Wrong Answer" система виводить "OK" і навпаки. Залишок ночі журі потратило на виправлення цієї помилки, але так і не зуміло виправити одну задачу.
Тепер вам потрібно розв'язати трохи іншу задачу про суму двох чисел.
Вхідні дані
У першому і єдиному рядку вхідного файла записано два числа — A та B, які по модулю не перевищують 50.
Вихідні дані
У першому та єдиному рядку вихідного файлу виведіть одне число, яке не дорівнює сумі A та B. Число не повинно перевищувати 100 по модулю.
Вхідні дані
7 4
Вихідні дані
12

  static void Main(string[] args)
        {
            string setir = Console.ReadLine();
            var massiv = setir.Split(' ');
            int a = int.Parse(massiv[0]);
            int b = int.Parse(massiv[1]);
            Console.WriteLine(a + b == 5 ? 7 : 5);
    }

Торт

На день народження спадкоємця Тутті королівський кухар приготував великий святковий торт, який було подано на стіл Трьом Товстунам. Перший товстун сам міг би повністю його з’їсти за t1 годин, другий - за t2 годин, а третій - за t3 годин.
Скільки часу потрібно товстунам, щоб з’їсти увесь святковий торт разом?

Вхідні дані

Єдиний рядок містить три не від'ємні цілі числа t1t2 та t3, кожне з яких не перевищує 10000.

Вхідні дані

Вивести час в годинах, за який товстуни одночасно можуть з’їсти торт. Результат округлити до двох десяткових знаків.
Вхідні дані #1
3 3 3
Вихідні дані #1
1.000
аналіз алгоритму
Продуктивність першого товстуна складе 1 / t1 торта на годину. Аналогічно продуктивності другого і третього товстуна з поїдання торта рівні 1 / t2 і 1 / t3 торта на годину. Якщо товстуни їстимуть торт одночасно, то в годину вони будуть з'їдати 1 / t1 + 1 / t2 + 1 / t3 частина торта. Отже весь торт може бути з'їдений 1/(1 / t1 + 1 / t2 + 1 / t3) за годин.

   static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int t1 = int.Parse(massiv[0]);
            int t2 = int.Parse(massiv[1]);
            int t3 = int.Parse(massiv[2]);
            double rez = 1.0 / (1.0 / t1 + 1.0 / t2 + 1.0 / t3);
            Console.WriteLine(rez);
        }
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
аналіз алгоритму
Необхідно обчислити значення функції f91 (n) для n £ 100.
Маємо: f91 (100) = f91 (f91 (111)) = f91 (101) = 91, f91 (99) = f91 (f91 (110)) = f91 (100) = 91. Аналогічно продовжуючи, можна помітити що f91 ( n) = 91, де 1 £ n £ 100.
Таким чином, має місце співвідношення:
f91(n) = 
static void Main(string[] args)
        {
            int res;
            int n = int.Parse(Console.ReadLine());
            if (n >= 101) res = n - 10; else res = 91;
            Console.WriteLine(res);
        }

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

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

Вхідні дані

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

Вихідні дані

Запис числа у зворотньому порядку.
Вхідні дані #1
1234
Вихідні дані #1
4321
      private static string tq(string x)
        {
            string y = "";
            int len = x.Length;
            for (int i = 0; i < len; i++)
            {
                y = x[i] + y;
            }
            return y;
        }
        static void Main(string[] args)
        {
            string e = Console.ReadLine();
            Console.WriteLine(tq(e));
        }
Сума першої та останньої цифр числа
Знайти суму першої та останньої цифри цілого числа.
Вхідні дані
Одне ціле 32-х розрядне число, що містить не менше 2-х цифр.
Вихідні дані
Одне число - розв'язок задачі.
Вхідні дані #1
2345
Вихідні дані #1
7
        private static int Iq(int x)
        {
            while (x > 9) x = x / 10;
            return x;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            if (n < 0) n = -n;
            Console.WriteLine(Iq(n) + n % 10);
        }

Найбільша сторона чотирикутника

На площині задано чотирикутник координатами своїх вершин. Обчислити довжину найбільшої сторони чотирикутника.

Вхідні дані

У єдиному рядку через пропуск координати X та Y вершин чотирикутника: спочатку точки A, потім B, далі C і D. Усі вхідні дані цілі числа, які не перевищують по модулю 100.

Вихідні дані

Єдине число - довжина найбільшої сторони. Результат вивести з точністю до сотих.
Вхідні дані
3 5 6 6 7 2 1 1
Вихідні дані
6.08
private static double Mesafe(double x1, double y1, double x2, double y2)
        {
            return Math.Sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));
        }
 private static double Max(double a, double b, double c, double d)
 {
     double max = a;
     if (b > max) max = b;
     if (c > max) max = c;
     if (d > max) max = d;
     return max;
 }
            static void Main(string[] args)
        {
         
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            double xA = double.Parse(massiv[0]);
            double yA = double.Parse(massiv[1]);
            double xB = double.Parse(massiv[2]);
            double yB = double.Parse(massiv[3]);
            double xC = double.Parse(massiv[4]);
            double yC = double.Parse(massiv[5]);
            double xD = double.Parse(massiv[6]);
            double yD = double.Parse(massiv[7]);

            double AB = Mesafe(xA, yA, xB, yB);
            double BC = Mesafe(xB, yB, xC, yC);
            double CD = Mesafe(xC, yC, xD, yD);
            double DA = Mesafe(xD, yD, xA, yA);
            Console.WriteLine("{0:N2}", Max(AB, BC, CD, DA));
         }

Розклад трицифрового числа

Розкласти задане трицифрове число на цифри.

Вхідні дані

Одне ціле трицифрове число (додатнє чи від'ємне).

Вихідні дані

Вивести кожну цифру числа в окремому рядку як наведено у прикладі.
Вхідні дані #1
198
Вихідні дані #1
1
9
8
static void Main(string[] args)
        {
            var e = Console.ReadLine();
            e = e.Trim();
            e = e.TrimStart('0');
            e = e.TrimStart('+');
            e = e.TrimStart('-');
            Console.WriteLine(e[0]);
            Console.WriteLine(e[1]);
            Console.WriteLine(e[2]);
        }

Без середньої

Записати дане трицифрове натуральне число без середньої цифри.

Вхідні дані

Одне натуральне трицифрове число.

Вихідні дані

Вивести трицифрове число без середньої цифри.
Вхідні дані #1
198
Вихідні дані #1
18
        static void Main(string[] args)
        {
            string eded = Console.ReadLine();
            Console.WriteLine("" + eded[0] + "" + eded[2]);
        }


Зворотній порядок
Записати дане трицифрове натуральне число в зворотному порядку.
Вхідні дані
У єдиному рядку задане натуральне трицифрове число.
Вихідні дані
Запис заданого числа у зворотному порядку.
static void Main(string[] args)
        {
            string e = Console.ReadLine();
            Console.WriteLine(e[2] + "" + e[1] + "" + e[0]);
        }
Висота трикутника
Визначити висоту трикутника площею S, якщо його основа більша за висоту на величину a.
Вхідні дані
Два цілих числа: S (0 < S ≤ 100), та a (|a| ≤ 100).
Вихідні дані
Шукана висота з точністю до сотих.
аналіз алгоритму
Нехай  h - висота трикутника. Тоді його основа дорівнює h + a. Площа трикутника дорівнює S = ½ h (h + a). Значення S і a задані, вирішуємо квадратне рівняння щодо h:
h2 + ha - 2S = 0,
дискриминант D = a2 + 4S,
позитивний корінь дорівнює h =
 Реалізація алгоритму
Читаємо вхідні дані. Вирішуємо квадратне рівняння S = ½ h (h + a) щодо h і виводимо його позитивний корінь.
static void Main(string[] args)
        {
            string s1 = Console.ReadLine();
            var massiv = s1.Split(' ');
            int s = int.Parse(massiv[0]);
            int a = int.Parse(massiv[1]);
            Console.WriteLine("{0:N2}", (-a + Math.Sqrt(a * a + 8 * s)) / 2.0);
        }
Число-паліндром
Перевірте, чи є задане число паліндромом.
Число називається паліндромом, якщо воно читається зліва направо і зправа наліво однаково.
Вхідні дані
Одне невід'ємне ціле 32-х розрядне число.
Вихідні дані
Вивести "Yes" якщо число паліндром, в іншому випадку "No".
Вхідні дані #1
121
Вихідні дані #1
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;
        }
        static void Main(string[] args)
        {
            string e = Console.ReadLine();
            Console.WriteLine(e == Gu(e) ? "Yes" : "No");
        }

Сума цифр числа

Знайти суму цифр цілого числа.

Вхідні дані

Одне ціле 32-х розрядне число (число може бути від'ємним).

Вихідні дані

Одне число - сума цифр даного числа.
Вхідні дані #1
321
Вихідні дані #1
6
private static int Suma(int x)
        {
            int sum = 0;
            while (x > 0)
            {
                sum = sum + x % 10;
                x = x / 10;
            }
            return sum;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            if (n < 0) n = -n;
            Console.WriteLine(Suma(n));
        }

Парні та непарні числа

Задано три цілих числа abc. Взначити, чи є серед них хоча б одне парне і хоча б одне непарне.

Вхідні дані

Числа abc, які не перевищують за модулем 10000 (числа можуть бути від'ємними).

Вихідні дані

Вивести "YES" або "NO"
Вхідні дані #2
7 7 7
Вихідні дані #2
NO

  private static bool T(int a, int b, int c)
        {
            if (a % 2 == 1) return true;
            if (b % 2 == 1) return true;
            if (c % 2 == 1) return true;
            return false;
        }

        private static bool C(int a, int b, int c)
        {
            if (a % 2 == 0) return true;
            if (b % 2 == 0) return true;
            if (c % 2 == 0) return true;
            return false;
        }

        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]);
            Console.WriteLine(T(a, b, c) && C(a, b, c) ? "YES" : "NO");
        }

Додатнє, від'ємне чи нуль

Задано ціле число n. Виведіть, чи є воно додатним, від'ємним або дорівнює 0.

Вхідні дані

Одне ціле число n, за модулем не більше за 109.

Вихідні дані

Виведіть "Positive", "Negative" чи "Zero" в залежності від значення n.
static void Main(string[] args)
        {          
            int a = Convert.ToInt32(Console.ReadLine());
            if (a == 0) Console.WriteLine("Zero");
            if (a > 0) Console.WriteLine("Positive");
            if (a < 0) Console.WriteLine("Negative");
        }
Постійна сума цифр
Знайти кількість двохзначних чисел, які не змінюють свою суму цифр при множені числа на однозначне ціле число N (N=0..9).
Вхідні дані: Ціле число N. 0≤N≤9.
Вихідні дані: Відповідь до задачі.
Вхідні дані
2
Вихідні дані
10
Пояснення: При множенні двоцифрових чисел на 2 не змінюють суму цифр такі числа: 18 27 36 45 54 63 72 81 90 99.
  private static int suma(int x)
        {
            int sum = 0;
            while (x > 0)
            {
                sum = sum + x % 10;
                x = x / 10;
            }
            return sum;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            var k = 0;
            for (int i = 10; i < 100; i++)
            {
                if (suma(i) == suma(i * n)) k++;
            }
            Console.WriteLine(k);

        }

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

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