вторник, 5 декабря 2017 г.

c#

Кількість операцій

Визначити загальну кількість операцій додавання (+), віднімання (-) та множення (*) у заданому арифметичному виразі.

Вхідні дані

У єдиному рядку задано арифметичний вираз без дужок та пропусків. Кількість символів у виразі не перевищує 250.

Вихідні дані

Вивести кількість вказаних операцій.
Вхідні дані #1
-1+2*3+a
Вихідні дані #1
3
  static void Main(string[] args)
        {
            string s = Console.ReadLine();
            s = s.TrimStart('-');
            s = s.TrimStart('+');
            int len = s.Length;
            int k = 0;
            for (int i = 0; i < len; i++)
            {
                if ((s[i] == '+') || (s[i] == '-') || (s[i] == '*')) k++;
            }
            Console.WriteLine(k);
        }


Від альфи до омеги

Надрукувати усі натуральні числа від a до b, не використовуючи ні циклів, ні генераторів.
Вхідні дані
Два натуральних числа a та b (1 ≤ a≤ b≤ 1000), записаних у одному рядку.
Вихідні дані
Виведіть усі числа від до b, разділяючи їх одним пропуском. Не допускається виведення лишнього пропуска в конці рядка.
Вхідні дані
2 5
Вихідні дані
2 3 4 5

Автоматизована Телефонна Станція

У Санкт-Петербурзі телефонні номери мають формат "XXX-XX-XX", де перші три цифри являють собою індекс Автоматизованої Телефонної Станції (АТС). Кожна АТС має в точності 10000 унікальних телефонних номерів.
Петро щойно придбав нову квартиру і хоче встановити телефонну лінію. На його думку телефонний номер є щасливим, якщо значення арифметичного вираження, що він собою являє, дорівнює нулю. Наприклад, телефонний номер 102-40-62 є щасливим (102 - 40 - 62 = 0), а номер 157-10-47 таким не є (157 - 10 - 47 = 100 ≠ 0).
Петро знає індекс АТС, яка обслуговує його будинок. Він хоче підрахувати кількість щасливих номерів, який вона може мати.

Вхіді дані

Єдине ціле число n - індекс АТС Петра (100 ≤ n ≤ 999).

Вихідні дані

Одне число - кількість щасливих телефонних номерів, що є у АТС Петра.
Вхідні дані #1
196
Вихідні дані #1
3

Ознака подільності на 11

Ознаку подільності на 11 часто формулюють так: додамо окремо цифри числа які стоять на парних і непарних місцях. Якщо суми отримаємо рівні, значить число ділиться на11.
Порахуйте ці суми.
Вхідні дані
Натуральне число від 10 до 2 млрд. включно.
Вихідні дані
Добуток сум.
Вхідні дані #1
27
Вихідні дані #1
14

Замінити цифру

Задано число N, а також цифри A та B. Замінити у цьому числі кожне входження цифри A на цифру B.
Вхідні дані
Програмі задано числа NAB (1 ≤ N ≤ 109).
Вихідні дані
Вивести отримане число.
Вхідні дані
123118 1 5
Вихідні дані
523558

Вибухонебезпечність

На одному з секретних заводів здійснюється обробка радіоактивних матеріалів, в результаті якої утворюються радіоактивні відходи двох типів: типу A (особливо небезпечні) і типу B (безпечні). Усі відходи упаковуються в спеціальні прямокутні контейнери однакових розмірів, після чого ці контейнери складаються у стопку один над одним для збереження. Стопка є вибухонебезпечною, якщо в ній є сусідами два ящики з відходами типу А. Потрібно написати програму, яка підраховує кількість можливих варіантів формування вибухобезпечної стопки із заданого загального числа контейнерів N.

Вхідні дані

У вхідному файлі міститься єдине число N (1 ≤ N ≤ 100).

Вихідні дані

У вихідний файл необхідно вивести шукане число варіантів.
Вхідні дані
4
Вихідні дані
8

МаркЕровані кубики

У Вітека є набір кубиків, на якому зображено англійські літери, причому як маленькі, так і великі. Нещодавно мама подарувала йому ще й набір кубиків з цифрами, у результаті чого Вітек навчився швидко рахувати в межах 10-ти. А ось тато мав необережність подарувати йому набір різнокольорових маркерів, після чого Вітек почав експериментувати з кубиками з цифрами: він замальовував чергову цифру і на її місці малював цифру на одиницю більшу. Так як він чудово розумів, що цифри 10 не існує, то він замість числа 10 завжди писав цифру 0.
Врахуйте, що іноді мама кликала Вітека поїсти і він не встигав завершити почату роботу і написати нову цифру – у цьому випадку кубик назавжди залишався порожнім, такі кубики позначено символом пропуску.
Вам необхідно допомогти Вітеку і написати програму, яка виконає чергову маркЕровку кубиків за вказаними правилами. Так як Ви знаходитесь не вдома, а на олімпіаді, то мама Вас їсти не покличе і роботу Вам обов'язково потрібно завершити.
Вхідні дані
Єдиний рядок, що складається з описаних вище символів. Довжина рядка не перевищує 255 символів.
Вихідні дані
Єдиний рядок – результат роботи Вашої програми.
Вхідні дані
abc1234567890ABC
Вихідні дані
abc2345678901ABC


четверг, 30 ноября 2017 г.

Процедура assign забезпечує зв'язок файлової змінної програми з реальним файлом на диску. Першим аргументом вказується змінна, другим - адресне ім'я файлу.

Процедура rewrite відкриває файл в режимі запису, тобто ми можемо вводити дані в файл за допомогою процедури виведення з програми write. Якщо вказаний файл відсутній на диску, то він буде створений. Якщо файл існує і містить дані, то всі вони будуть видалені і замінені в подальшому новими (перезаписані).


Запис даних у файл - результат виконання процедури write (f, c), де f - файлова змінна, а з - виведений з програми, але вводиться в файл символ.

В кінці потрібно закрити файл і «звільнити» змінну f. Це робиться за допомогою процедури close.

Читання даних з файлу

Процедура reset відкриває файл для читання. Тобто ми можемо в подальшому в програмі отримувати дані з файлу за допомогою процедури read. Дані витягуються «порціями» базового типу. В даному прикладі - це char (символи). Читання даних з файлу триває до тих пір, поки не буде досягнутий кінець файлу. Функція eof перевіряє чи досягнуто кінець файлу, переданого їй як аргумент і, якщо досягнуто, повертає true. Вираз not eof (f) перевіряє зворотне - то, що кінець файлу ще не досягнуто.


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

Зчитати з файлу input.txt числа (числа записані в стовпчик). Потім записати їх добуток в файл output.txt



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

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

Послідовність Фібоначчі
Послідовність Фібоначчі задано так:
  • 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);
        }

Довжина вектора

Обчислити довжину вектора.

Вхідні дані

Чотири цілих числа x1y1x2y2 - координати початку та кінця вектора відповідно. Усі вхідні числа не перевищують за модулем 10000.

Вихідні дані

Одне число - довжина заданого вектора з точністю до шести десяткових знаків.
Вхідні дані
1 1 2 2
Вихідні дані
1.414214
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int x1 = int.Parse(massiv[0]);
            int y1 = int.Parse(massiv[1]);
            int x2 = int.Parse(massiv[2]);
            int y2 = int.Parse(massiv[3]);
            double d = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
            Console.WriteLine("{0:#.######}", d);          
        }

Належність точки променю

Визначте, чи належить задана точка променю.

Вхідні дані

Містить шість цілих чисел - координати точки та коррдинати початку та кінця вектора. Усі числа не перевищують за модулем 10000.

Вихідні дані

Вивести YES, якщо точка належить променю та NO у протилежному випадку.
Вхідні дані #1
1 6 3 7 5 8
Вихідні дані #1
NO
        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int x0 = int.Parse(massiv[0]);
            int y0 = int.Parse(massiv[1]);
            int x1 = int.Parse(massiv[2]);
            int y1 = int.Parse(massiv[3]);
            int x2 = int.Parse(massiv[4]);
            int y2 = int.Parse(massiv[5]);
            if ((x0 - x1) * (y2 - y1) == (x2 - x1) * (y0 - y1) &&
+(x0 - x1) * (x2 - x1) >= 0 && (y0 - y1) * (y2 - y1) >= 0) Console.WriteLine("YES\n");
            else Console.WriteLine("NO\n");
        }

Точка всередині круга

Перевірити, чи знаходиться точка всередині круга.

Вхідні дані

У першому рядку задано координати центра круга та його радіус. У другому рядку задано координати точки A. Усі числа цілі, не перевищують за модулем 1000.

Вихідні дані

Вивести "YES", якщо точка A належить кругу (з границями), і "NO" інакше.
Вхідні дані #1
2 1 2
1 3
Вихідні дані #1
NO
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int x0 = int.Parse(massiv[0]);
            int y0 = int.Parse(massiv[1]);
            int r = int.Parse(massiv[2]);
            string ss = Console.ReadLine();
            var massiv1 = ss.Split(' ');
            int x = int.Parse(massiv1[0]);
            int y = int.Parse(massiv1[1]);
            if ((x - x0) * (x - x0) + (y - y0) * (y - y0) <= r * r)
            Console.WriteLine("YES\n");
            else Console.WriteLine("NO\n");
        }

Віднімання

Знайти різницю двох цілих невід`ємних чисел A та B.
Вхідні дані
У вхідному файлі задано два цілих невід`ємних числа A та B (B ≤ A ≤ 1010000), кожне у своєму рядку.
Вихідні дані
У вихідний файл виведіть одне число, яке дорівнює різниці A та B.
Вхідні дані
5
3
Вихідні дані
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            BigInteger a = BigInteger.Parse(massiv[0]);
            string ss = Console.ReadLine();
            var massiv1 = ss.Split(' ');
            BigInteger b = BigInteger.Parse(massiv1[0]);
Console.WriteLine(a-b);
        }

Порівняння

Порівняйте два числа A та B.
Вхідні дані
У вхідному файлі задано два цілих невід`ємних числа A та B (AB <= 1010000) кожне у своєму рядку.
Вихідні дані
У вихідний файл виведіть "<", якщо A < B, "=", якщо A = B та ">", якщо A > B.
Вхідні дані
2
1
Вихідні дані
> 

 

Належність точки відрізку

Визначити, чи належить задана точка відрізку.

Вхідні дані

Шість цілих чисел - координати точки і координати початку і кінця відрізку. Усі числа не перевищують за модулем 10000.

Вихідні дані

Вивести "YES", якщо точка належить відрізку, і "NO" у протилежному випадку.
Вхідні дані #1
3 3 1 2 5 4
Вихідні дані #1
YES
Вхідні дані #2
3 3 1 2 5 3
Вихідні дані #2
NO
        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int x = int.Parse(massiv[0]);
            int y = int.Parse(massiv[1]);
            int x1 = int.Parse(massiv[2]);
            int y1 = int.Parse(massiv[3]);
            int x2 = int.Parse(massiv[4]);
            int y2 = int.Parse(massiv[5]);
            double l1, l2,l3;
            l1 = Math.Sqrt(Math.Pow((x1 - x), 2) + Math.Pow((y1 - y), 2));
            l2 = Math.Sqrt(Math.Pow((x2 - x), 2) + Math.Pow((y2 - y), 2));
            l3 = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
            if (l3 == 0) Console.WriteLine("NO");
            else
            {
                if (l3 == (l1 + l2)) Console.WriteLine("YES");
                else
                    Console.WriteLine("NO");
            }
          
            // Console.ReadLine();
        }

Гармата

У початку координат встановлено гармату, яка стріляє кульками для пінг-понгу. На деякій відстані R від неї, паралельно осі ОХ, знаходиться цегляна стінка нескінченної довжини. Між стінкою і віссю OX розміщено точкову ціль з координатами (X,Y). Потрібно націлити гармату так, щоб кулька вдарилася спочатку об стінку, а потім попала в ціль. Визначіть найкоротшу відстань від осі OY до точки удару кульки в стінку.
Вхідні дані
Перший рядок містить кількість тестів. Для кожного тесту в окремому рядку міститься три цілих числа RX та Y (-10<=X<=100<=Y<R<=10), відокремлених пропусками.
Вихідні дані
Для кожного тесту в окремому рядку вивести відстань по прямій лінії від осі OY до точки удару кульки в стіну з точністю до двох знаків після коми.

Вхідні дані
2
10 5 5
10 10 5
Вихідні дані
3.33
6.67
static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            for (int i = 0; i < n; i++)
            {
                string s = Console.ReadLine();
                var massiv = s.Split(' ');
                double r = double.Parse(massiv[0]);
                double x = double.Parse(massiv[1]);
                double y = double.Parse(massiv[2]);
                if (x < 0) x = -x;
                Console.WriteLine("{0:N2}", r * x / (2 * r - y));
            }
        }

Йо-йо

Іграшка йо-йо складається з катушки, на яку намотано нитку. Якщо, тримаючи за кінець нитки, відпустити катушку, то вона буде, обертаючись, спочатку опускатись донизу, а потім за інерцією підніматись вверх. Але висота, на яку катушка підніметься, буде в k раз меншою, ніж висота, з якої вона опустилась. Будемо вважати, що катушка зупинилась, якщо висота її чергового підйому не перевищує 1.
Напишіть програму, яка за довжиною нитки l та коефіцієнту k рахує кількість підйомів катушки до зупинки. Наприклад, нехай 172, тоді катушка буде підніматись на висоти 8.54.252.1251.0625, а потім зупиниться. Таким чином будемо мати 4 підйоми.
Вхідні дані
Два цілих числа l (1  ≤l ≤  109) та k (2  ≤  k ≤  100).
Вихідні дані
Вивести одне число – кількість підйомів.
Вхідні дані #1
17 2
Вихідні дані #1
4
static void Main(string[] args)
        {
            string w = Console.ReadLine();
            var massiv = w.Split(' ');
            double l = double.Parse(massiv[0]);
            int k = int.Parse(massiv[1]);
            int s = 0;
            l = l / k;
            while (l > 1)
            {
                s++;
                l = l / k;
            }
            Console.WriteLine(s);       
        }

Кодування

Послідовність бітів кодується наступним чином. Якщо значення попереднього біта заданої послідовності відрізняється від значення поточного біта, що кодується, в результуючу послідовність записується 1. Якщо значення бітів не відрізняються, то записується 0. Для першого біта послідовності попереднім є біт зі значенням 0.
Напишіть програму, яка виконує кодування.
Вхідні дані
Вводиться рядок довжиною не більше 100 символів, який складається лише з 0 і 1, який представляє собою кодовану послідовність бітів.
Вихідні дані
Вивести результат кодування.
Вхідні дані
10010111
Вихідні дані
11011100
  static void Main(string[] args)
        {
            string s = Console.ReadLine();
            int len = s.Length;
            string c = s[0] == '0' ? "0" : "1";
            for (int i = 1; i < len; i++)
            {
                c = (s[i] == s[i - 1]) ? c + "0" : c + "1";
            }
            Console.WriteLine(c);
        }

Угадай число

Боб и его старший брат Альберт часто играют в игру "Угадай число". Сначала Боб загадывает число K в диапазоне от 1 до N. Потом Альберт называет числа, а Боб говорит, является названное число больше или меньше загаданного или Альберт назвал правильное число. Альберт для угадывания всегда использует следующую стратегию.
1 шаг. Альберт задает A=1 и B=N
2 шаг. Альберт вычисляет M – целую часть среднего арифметического чисел A и B
3 шаг. Альберт называет число M
4 шаг. Если Боб говорит "Меньше", то Альберт полагает A=M+1 и переходит к шагу 2
5 шаг. Если Боб говорит "Больше", то Альберт полагает B=M1 и переходит к шагу 2
6 шаг. Если Боб говорит "Угадал", то игра заканчивается
Например, пусть N=9, а задуманное Бобом число K равно 6. Сначала A=1B=9. Альберт называет число 5 и получает ответ "Меньше". Теперь A=6B=9. Следующее число-попытка 7. Боб отвечает "Больше". Теперь A=6B=6. Альберт называет 6 и получает ответ "Угадал".
Напишите программу, которая определяет, сколько чисел придется назвать Альберту, прежде чем он получит ответ "Угадал" от Боба.
Входные данные
В первой строке входного файла содержатся два целых числа N (1  ≤  N ≤  1000) и K (1  ≤  K ≤  N), разделенных пробелом.
Выходные данные
В выходной файл вывести одно целое число – количество названных Альбертом чисел до получения ответа Боба "Угадал".
Вхідні дані
9 6
Вихідні дані
3
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int n = int.Parse(massiv[0]);
            int k = int.Parse(massiv[1]);
            int a = 1;
            int b = n;
            int q = 1;
            int m = (a + b) / 2;
            while (m != k)
            {
                if (m > k) b = m - 1;
                else a = m + 1;
                m = (a + b) / 2;
                q++;
            }
            Console.WriteLine(q);
        }

Поставка содової води

Тім дуже полюбляє содову воду, іннколи він нею ніяк не може напитися. Ще більш прикрим є той факт, що у нього постійно бракує грошей. Тому єдиним легальним способом їх отримання є продаж порожніх пляшок з-під соди. Іноді на додаток до його особисто випитих пляшок додаються ті, які Тім іноді знаходить на вулиці. Одного дня Тіма настільки замучила спрага, що він вирішив пити до тих пір поки міг собі це дозволити.
Вхідні дані
Три целі невід'ємні числа efc, де e (e < 1000) - кількість порожніх пляшок, які є у Тіма на початку дня, f (f < 1000) - кількість порожніх пляшок, знайдених протягом дня, і c (1 < c < 2000) - кількість порожніх пляшок, необхідних для покупки нової пляшки.
Вихідні дані
Скільки пляшок содової води зможе випити Тім, коли його замучила спрага?
Вхідні дані #1
9 0 3
Вихідні дані #1
4
static void Main(string[] args)
        {
            string s = Console.ReadLine();
            var massiv = s.Split(' ');
            int e = int.Parse(massiv[0]);
            int f = int.Parse(massiv[1]);
            int c = int.Parse(massiv[2]);
            int k = 0;
            e = e + f;
            while (c <= e)
            {
                int n = e / c;
                e = n + e % c;
                k = k + n;
            }
            Console.WriteLine(k);
        }

Задача A + B

Знайдіть A + B.
Вхідні дані
У кожному рядку задано два цілих числа A та B (|A|, |B| ≤ 30000). Дані зчитуйте до кінця файлу.
Вихідні дані
Для кожного наведеного прикладу виведіть суму A + B у окремому рядку.
Вхідні дані #1
1 1
1 2
Вихідні дані #1
2
3
static void Main(string[] args)
        {
            string s = "";
            while ((s = Console.ReadLine()) != null)
            {
                var massiv = s.Split(' ');
                int a = int.Parse(massiv[0]);
                int b = int.Parse(massiv[1]);
                Console.WriteLine(a + b);
            }
            }

Кількість операцій

Визначити загальну кількість операцій додавання (+), віднімання (-) та множення (*) у заданому арифметичному виразі.

Вхідні дані

У єдиному рядку задано арифметичний вираз без дужок та пропусків. Кількість символів у виразі не перевищує 250.

Вихідні дані

Вивести кількість вказаних операцій.
Вхідні дані #1
-1+2*3+a
Вихідні дані #1
3
  static void Main(string[] args)
        {
            string s = Console.ReadLine();
            s = s.TrimStart('-');
            s = s.TrimStart('+');
            int len = s.Length;
            int k = 0;
            for (int i = 0; i < len; i++)
            {
                if ((s[i] == '+') || (s[i] == '-') || (s[i] == '*')) k++;
            }
            Console.WriteLine(k);

        }