Слова с прописной буквы
Условие
На стандартный вход подается строка, содержащая слова, разделенные пробелами.
Необходимо сделать заглавной буквой начало каждого слова в строке.
Вывести на стандартный вывод
Формат входных данных
Строка
Формат выходных данных
Строка
Примеры
Входные данные:
hEllo world!
Выходные данные:
Hello World!
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; namespace Test1 { class Program { static void Main(string[] args) { string inp = Console.ReadLine(); Console.WriteLine(CapitalizeAllWords(inp)); } static string CapitalizeAllWords(string s) { var sb = new System.Text.StringBuilder(s.Length); bool inWord = false; foreach (var c in s) { if (char.IsLetter(c)) { sb.Append(inWord ? char.ToLower(c) : char.ToUpper(c)); inWord = true; } else { sb.Append(c); inWord = false; } } return sb.ToString(); } } } |
Подсчет символов
Условия
На стандартный вход подается строка.
Нужно написать функцию, которая на вход принимает строку, а на выходе мы получаем строку, состоящую из цифр, которые соответствуют правилу:
Если текущий символ ни разу еще не встречался, то пишем 1, если он уже встречался ранее, то записываем сколько раз он уже встречался
Вывести на стандартный вывод
Формат входных данных
Строка
Формат выходных данных
Строка, состоящая из цифр
Примеры
Входные данные:
Привет мир!
Выходные данные:
11111111221
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Linq; using System.Text; namespace test2 { class Program { static void Main(string[] args) { string inp = Console.ReadLine(); Console.WriteLine(CounterWorlds(inp)); } static string CounterWorlds(string s) { StringBuilder sb = new StringBuilder(s.Length); StringBuilder num = new StringBuilder(); int count = 0; foreach (var c in s) { sb.Append(c); count = sb.ToString().Count(x => x == c); num.Append(count.ToString()); } return num.ToString(); } } } |
Количество свободных IP-адресов
Реализовать функцию, которая подсчитывает количество свободных IP-адресов, находящихся между двумя переданными адресами, включая первый адрес и не включая второй.
Вывести на стандартный вывод.
Формат входных данных
Два IP-адреса в формате {ddd}.{ddd}.{ddd}.{ddd}, разделенные пробелами, где {ddd} от 0 до 255
Формат выходных данных
Число
Примеры
Входные данные:
10.0.0.0 10.0.0.50
Выходные данные:
50
Входные данные:
159.197.181.188 160.138.68.148
Выходные данные:
12881624
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System; using System.Linq; namespace Test3 { class Program { static void Main(string[] args) { string[] inp = Console.ReadLine().Split(' '); Console.WriteLine(CounterIpAddresses(inp[0],inp[1])); } static double CounterIpAddresses(string IpFrom,string IpTo) { int[] ip1 = IpFrom.Split('.').Select(i => int.Parse(i.ToString())).ToArray(); int[] ip2 = IpTo.Split('.').Select(i => int.Parse(i.ToString())).ToArray(); double ip2bitFrom = ip1[0] * Math.Pow(256,3) + ip1[1]*Math.Pow(256,2)+ip1[2]*Math.Pow(256,1)+ip1[3]; double ip2bitTo = ip2[0] * Math.Pow(256, 3) + ip2[1] * Math.Pow(256, 2) + ip2[2] * Math.Pow(256, 1) + ip2[3]; double diff = (ip2bitTo - ip2bitFrom); return diff; } } } |
Дилемма продавца
Условия
Рекомендуем ознакомиться с FAQ по решению алгоритмических задач (версии языков, ошибки и др.).
Вышла новая редакция книги CLR via C#, и в книжных магазинах начался ажиотаж, выстроились огромные очереди из желающих ее купить. У каждого человека есть на руках купюры номиналом 1000, 2000, 5000 рублей. При этом книга стоит 1000 рублей.
В начале рабочего дня в кассе у продавца нет денег на сдачу.
Необходимо написать функцию, которая принимает коллекцию из значений номиналов купюр, которые передают покупатели продавцу за книгу, и которая на основе этого определяет, сможет ли продавец продать книги и дать сдачу всем покупателям. Возвращает ответ True или False. Порядок покупателей строго учитывается.
Результат выполнения надо вывести в стандартный вывод.
Формат входных данных
Строка, в которой содержатся номиналы купюр, разделенные пробелами.
Формат выходных данных
Строка, либо «True», либо «False»
Примеры
Входные данные:
1000 2000 1000 2000 5000
Выходные данные:
True
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Linq; namespace Test4 { class Program { static void Main(string[] args) { string inp = Console.ReadLine(); Console.WriteLine(CountingCoppers(inp)); } static string CountingCoppers(string s) { int[] buyers = s.Split(' ').Select(i => int.Parse(i.ToString())).ToArray(); int seller = 0; int book = 1000; foreach(int buy in buyers) { seller -= buy - book; if (seller < 0) return "False"; seller += buy; } return "True"; } } } |
Сравнение римских чисел
Условия
Необходимо написать функцию сравнения двух римских чисел, которая возвращает -1, если первое число меньше, чем второе; 0, когда числа равны; и 1, если первое число больше, чем второе.
Римская система счисления содержит символы: I, V, X, L, C, D и M. Следующие цифры римской системы счисления соответствуют символам в десятичной системе: I = 1; V = 5; X = 10; L = 50; C = 100; D = 500; M = 1000.
Числа в римской системе обычно записываются от большего к меньшему, слева направо, например, семь можно записать как V + II = VII, а двадцать семь как XX + V + II = XXVII. Однако, число 4 записывается не как IIII, а как IV. Т.е. для получения некоторых цифр в римской системе счисления используется принцип вычитания. Следующие правила задают условия, при которых следует использовать принцип вычитания:
I может предшествовать V (5) и X (10) для получения 4-х и 9-и соответственно;
X может предшествовать L (50) и С (100) для получения 40-а и 90-а соответственно;
С может предшествовать D (500) и M (1000) для получения 400-а и 900-а соответственно.
Результат вывести на стандартный вывод.
Формат входных данных
Строка, в которой содержатся два числа в римской форме, разделенные пробелом.
Формат выходных данных
Строка, либо «-1», либо «0», либо «1»
Примеры
Входные данные:
MMLXII MMLX
Выходные данные:
1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
using System; namespace Test5 { class Program { static void Main(string[] args) { string inp = Console.ReadLine(); Console.WriteLine(CompareToRoman(inp)); } static int CompareToRoman(string s) { string[] str = s.Split(' '); int A = RomanToDecimal(str[0]); int B = RomanToDecimal(str[1]); if (A > B) return 1; else if (A < B) return -1; else return 0; } public static int RomanToDecimal(String romanNumber) { int dec = 0; int lastNumber = 0; String romanNumeral = romanNumber.ToUpper(); for (int x = romanNumeral.Length - 1; x >= 0; --x) { char convertToDecimal = romanNumeral[x]; switch (convertToDecimal) { case 'C': dec = processDecimal(100, lastNumber, dec); lastNumber = 100; break; case 'D': dec = processDecimal(500, lastNumber, dec); lastNumber = 500; break; case 'I': dec = processDecimal(1, lastNumber, dec); lastNumber = 1; break; case 'L': dec = processDecimal(50, lastNumber, dec); lastNumber = 50; break; case 'M': dec = processDecimal(1000, lastNumber, dec); lastNumber = 1000; break; case 'V': dec = processDecimal(5, lastNumber, dec); lastNumber = 5; break; case 'X': dec = processDecimal(10, lastNumber, dec); lastNumber = 10; break; } } return dec; } private static int processDecimal(int dec, int lastNumber, int lastDecimal) { return lastNumber > dec ? lastDecimal - dec : lastDecimal + dec; } } } |
Вычисление логического выражения
Условия
Рекомендуем ознакомиться с FAQ по решению алгоритмических задач (версии языков, ошибки и др.).
На стандартный вход подается логическое выражение и его булевы значения, необходимо вернуть результат самого логического выражения.
Список возможных логических операторов:
& — логическое И
| — логическое ИЛИ
! — отрицание
= — эквивалентность
Приоритет операторов соответствует стандартным приоритетам алгебры логики.
Результат вернуть на стандартный вывод.
Формат входных данных
Строка, содержащая логическое выражение, перечисление операндов и их значения, разделенные пробелом.
Формат выходных данных
Строка, либо «False», либо «True»
Примеры
Входные данные:
a&b|c=d&!a a True b False c True d True
Выходные данные:
False
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
using System; using System.Collections.Generic; using System.Text; namespace Test6 { class Program { static void Main(string[] args) { string inp = Console.ReadLine(); Console.WriteLine(LogicCalculation(inp)); } static bool LogicCalculation(string s) { string[] arr = s.Split(' '); string expression = arr[0]; List<string> operatons = new List<string>(arr); operatons.RemoveRange(0, 1); List<Operator> operators = new List<Operator>(); Operator oper = new Operator(); ; for(int i=0;i< operatons.Count;i++) { if (i % 2 == 0) { oper = new Operator(); oper.litter = operatons[i]; } else { oper.value = Boolean.Parse(operatons[i]); operators.Add(oper); } } foreach (Operator o in operators) expression = expression.Replace(o.litter, Convert.ToInt32(o.value).ToString()); string[] args = expression.Split('='); string ar1 = StrToLog(ReplaceNot(args[0])); string ar2 = StrToLog(ReplaceNot(args[1])); return ar1 == ar2; } static string StrToLog(string s) { StringBuilder sb = new StringBuilder(s); while(sb.Length > 1) { bool res = false; var a = sb[0] == '1' ? true : false; var b = sb[2] == '1' ? true : false; if (sb[1] == '&') res = a && b; if (sb[1] == '|') res = a || b; sb.Remove(1, 2); sb[0] = res ? '1' : '0'; } return sb.ToString(); } static string ReplaceNot(string s) { List<int> ind = new List<int>(); char a; int i = 0; foreach (char cr in s) { if (cr == '!') ind.Add(i); i++; } StringBuilder sb = new StringBuilder(s); foreach (int tt in ind) { a = s[tt +1]=='1'? '0' : '1'; sb[tt + 1] = a; } sb.Replace("!", string.Empty); return sb.ToString(); } } class Operator { public string litter; public bool value; } } |