# Дан текста на русском языке. Напечатать в алфавитном порядке все звонкие согласные буквы, которые входят более чем в одно слово. ## Решение: ``` using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { string text = "Дан текст на русском языке. Напечатать на алфавитном порядке все звонкие согласные буквы, которые входят более чем в одно слово."; var vowels = new HashSet { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' }; var consonants = new Dictionary(); foreach (char letter in text.ToLower()) { if (char.IsLetter(letter) && !vowels.Contains(letter)) { if (consonants.ContainsKey(letter)) { consonants[letter]++; } else { consonants.Add(letter, 1); } } } var multipleConsonants = consonants.Where(pair => pair.Value > 1).OrderBy(pair => pair.Key); Console.WriteLine("Звонкие согласные буквы, входящие более чем в одно слово, на алфавитном порядке:"); foreach (var pair in multipleConsonants) { Console.WriteLine(pair.Key); } } } ``` ## Результат работы: ``` Звонкие согласные буквы, входящие более чем в одно слово, на алфавитном порядке: б в д з к л м н п р с т ч ``` # Ввести с консоли строку в формате ДД.ММ.ГГГГ. Проверьте является ли введенная строка валидной датой. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите дату в формате ДД.ММ.ГГГГ:"); string input = Console.ReadLine(); if (DateTime.TryParseExact(input, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out _)) { Console.WriteLine("Введенная строка является валидной датой."); } else { Console.WriteLine("Введенная строка не является валидной датой."); } } } ``` ## Результат работы: ``` Введите дату в формате ДД.ММ.ГГГГ: 29.02.2024 Введенная строка является валидной датой. ``` # Найти количество дней между двумя датами. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите первую дату в формате ДД.ММ.ГГГГ:"); string firstDateString = Console.ReadLine(); Console.WriteLine("Введите вторую дату в формате ДД.ММ.ГГГГ:"); string secondDateString = Console.ReadLine(); if (DateTime.TryParseExact(firstDateString, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime firstDate) && DateTime.TryParseExact(secondDateString, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime secondDate)) { TimeSpan difference = secondDate - firstDate; int daysDifference = (int)difference.TotalDays; Console.WriteLine($"Количество дней между двумя датами: {daysDifference} дней."); } else { Console.WriteLine("Одна из введенных строк не является валидной датой."); } } } ``` ## Результат работы: ``` Введите первую дату в формате ДД.ММ.ГГГГ: 15.02.2024 Введите вторую дату в формате ДД.ММ.ГГГГ: 23.02.2024 Количество дней между двумя датами: 8 дней. ``` # Найти количество часов между двумя датами. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите первую дату в формате ДД.ММ.ГГГГ ЧЧ:мм:"); string inputDate1 = Console.ReadLine(); Console.WriteLine("Введите вторую дату в формате ДД.ММ.ГГГГ ЧЧ:мм:"); string inputDate2 = Console.ReadLine(); string format = "dd.MM.yyyy HH:mm"; DateTime date1; DateTime date2; if (DateTime.TryParseExact(inputDate1, format, null, System.Globalization.DateTimeStyles.None, out date1) && DateTime.TryParseExact(inputDate2, format, null, System.Globalization.DateTimeStyles.None, out date2)) { TimeSpan difference = date2 - date1; int hoursDifference = (int)difference.TotalHours; Console.WriteLine($"Количество часов между двумя датами: {hoursDifference} часов."); } else { Console.WriteLine("Неверный формат введенных дат."); } } } ``` ## Результат работы: ``` 11.12.2023 11:05 Введите вторую дату в формате ДД.ММ.ГГГГ ЧЧ:мм: 13.12.2024 00:04 Количество часов между двумя датами: 8820 часов. ``` # Найти количество минут между двумя датами. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите первую дату в формате ДД.ММ.ГГГГ ЧЧ:мм:"); string inputDate1 = Console.ReadLine(); Console.WriteLine("Введите вторую дату в формате ДД.ММ.ГГГГ ЧЧ:мм:"); string inputDate2 = Console.ReadLine(); string format = "dd.MM.yyyy HH:mm"; DateTime date1; DateTime date2; if (DateTime.TryParseExact(inputDate1, format, null, System.Globalization.DateTimeStyles.None, out date1) && DateTime.TryParseExact(inputDate2, format, null, System.Globalization.DateTimeStyles.None, out date2)) { TimeSpan difference = date2 - date1; int minutesDifference = (int)difference.TotalMinutes; Console.WriteLine($"Количество минут между двумя датами: {minutesDifference} минут."); } else { Console.WriteLine("Неверный формат введенных дат."); } } } ``` ## Результат работы: ``` Введите первую дату в формате ДД.ММ.ГГГГ ЧЧ:мм: 29.01.2024 19:50 Введите вторую дату в формате ДД.ММ.ГГГГ ЧЧ:мм: 04.02.2024 21:05 Количество минут между двумя датами: 8715 минут. ``` # Найти "день программиста" (256-й день в году) для указанного года (ввести с консоли). Вывести дату и день недели. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите год:"); int year; if (!int.TryParse(Console.ReadLine(), out year)) { Console.WriteLine("Некорректный ввод года."); return; } // Проверяем, является ли год високосным bool isLeapYear = DateTime.IsLeapYear(year); // Создаем дату для 256-го дня года DateTime programmerDay = new DateTime(year, 1, 1).AddDays(255 + (isLeapYear ? 1 : 0)); Console.WriteLine($"День программиста для {year} года: {programmerDay:dd.MM.yyyy}"); Console.WriteLine($"День недели: {programmerDay.DayOfWeek}"); } } ``` ## Результат работы: ``` Введите год: 2024 День программиста для 2024 года: 13.09.2024 День недели: Friday ``` # Известен номер n некоторого дня года (1 ≤ n ≤ 365). Определить номер и название дня недели, на который выпадает данный день года. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите номер дня в году (1-365):"); int dayOfYear; if (!int.TryParse(Console.ReadLine(), out dayOfYear) || dayOfYear < 1 || dayOfYear > 365) { Console.WriteLine("Некорректный ввод номера дня в году."); return; } // Создаем дату для указанного дня года DateTime date = new DateTime(DateTime.Now.Year, 1, 1).AddDays(dayOfYear - 1); Console.WriteLine($"Номер дня недели: {(int)date.DayOfWeek + 1}"); Console.WriteLine($"Название дня недели: {date.DayOfWeek}"); } } ``` ## Результат работы: ``` Введите номер дня в году (1-365): 200 Номер дня недели: 5 Название дня недели: Thursday ``` # Задана дата экзамена. С клавиатуры надо вводить другую дату, в случае, если дата раньше даты экзамена, вывести "осталось n дней", если уже прошел экзамен "прошло n дней", и если экзамен сегодня "сегодня экзамен!" ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите дату экзамена в формате ГГГГ-ММ-ДД:"); DateTime examDate; if (!DateTime.TryParse(Console.ReadLine(), out examDate)) { Console.WriteLine("Некорректный ввод даты экзамена."); return; } Console.WriteLine("Введите текущую дату в формате ГГГГ-ММ-ДД:"); DateTime currentDate; if (!DateTime.TryParse(Console.ReadLine(), out currentDate)) { Console.WriteLine("Некорректный ввод текущей даты."); return; } if (currentDate < examDate) { TimeSpan remainingDays = examDate - currentDate; Console.WriteLine($"Осталось {remainingDays.Days} дней до экзамена."); } else if (currentDate > examDate) { TimeSpan passedDays = currentDate - examDate; Console.WriteLine($"Прошло {passedDays.Days} дней после экзамена."); } else { Console.WriteLine("Сегодня экзамен!"); } } } ``` ## Результат работы: ``` Введите дату экзамена в формате ГГГГ-ММ-ДД: 2024-06-27 Введите текущую дату в формате ГГГГ-ММ-ДД: 2024-02-29 Осталось 119 дней до экзамена. ``` # Вывести дату в формате ДД.ММ.ГГГГ для "завтра" ## Решение: ``` using System; class Program { static void Main() { DateTime tomorrow = DateTime.Today.AddDays(1); string formattedDate = tomorrow.ToString("dd.MM.yyyy"); Console.WriteLine($"Дата завтрашнего дня в формате ДД.ММ.ГГГГ: {formattedDate}"); } } ``` ## Результат работы: ``` Дата завтрашнего дня в формате ДД.ММ.ГГГГ: 01.03.2024 ``` # Задан день и месяц рождения в формате dd.mm. Определите, сколько дней осталось/прошло с дня рождения. Если сегодня - день рождения, то вывести поздравление. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите день и месяц рождения (в формате dd.mm):"); string input = Console.ReadLine(); DateTime today = DateTime.Today; int currentYear = today.Year; // Парсим введенную дату рождения if (DateTime.TryParseExact(input, "dd.MM", null, System.Globalization.DateTimeStyles.None, out DateTime birthday)) { birthday = birthday.AddYears(currentYear - birthday.Year); // Устанавливаем год рождения равным текущему if (birthday < today) { birthday = birthday.AddYears(1); // Если день рождения уже прошел в текущем году, устанавливаем на следующий год } TimeSpan daysUntilBirthday = birthday - today; if (daysUntilBirthday.Days == 0) { Console.WriteLine("С днем рождения! Поздравляем!"); } else { Console.WriteLine($"До дня рождения осталось {daysUntilBirthday.Days} дней."); } } else { Console.WriteLine("Некорректный формат ввода. Пожалуйста, введите день и месяц в формате dd.mm."); } } } ``` ## Результат работы: ``` Введите день и месяц рождения (в формате dd.mm): 15.05 До дня рождения осталось 76 дней. ``` # Часы показывают время в формате hh:mm:ss. Определите количество секунд, которое прошло с начала суток. ## Решение: ``` using System; class Program { static void Main() { Console.WriteLine("Введите текущее время в формате hh:mm:ss:"); string input = Console.ReadLine(); if (DateTime.TryParseExact(input, "HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out DateTime time)) { int secondsPassed = time.Hour * 3600 + time.Minute * 60 + time.Second; Console.WriteLine($"С начала суток прошло {secondsPassed} секунд."); } else { Console.WriteLine("Некорректный формат времени. Пожалуйста, введите время в формате hh:mm:ss."); } } } ``` ## Результат работы: ``` Введите текущее время в формате hh:mm:ss: 00:43:32 С начала суток прошло 2612 секунд. ``` # Задан неупорядоченный список дат в формате ДД.ММ.ГГГГ, найти ближайшую (к сегодняшнему дню) дату из списка. ## Решение: ``` using System; using System.Collections.Generic; class Program { static void Main() { Console.WriteLine("Введите список дат через запятую в формате ДД.ММ.ГГГГ:"); string input = Console.ReadLine(); string[] dateStrings = input.Split(','); List dates = new List(); foreach (string dateString in dateStrings) { if (DateTime.TryParseExact(dateString.Trim(), "dd.MM.yyyy", null, System.Globalization.DateTimeStyles.None, out DateTime date)) { dates.Add(date); } else { Console.WriteLine($"Дата {dateString} имеет некорректный формат и будет пропущена."); } } DateTime today = DateTime.Today; DateTime closestDate = dates[0]; TimeSpan closestDifference = closestDate - today; foreach (DateTime date in dates) { TimeSpan difference = date - today; if (Math.Abs(difference.TotalDays) < Math.Abs(closestDifference.TotalDays)) { closestDate = date; closestDifference = difference; } } Console.WriteLine($"Ближайшая дата к сегодняшнему дню: {closestDate.ToString("dd.MM.yyyy")}"); } } ``` ## Результат работы: ``` 26.12.2023,27.02.2024,20.02.2024,15.09.2022 Ближайшая дата к сегодняшнему дню: 27.02.2024 ``` # Задан неупорядоченный список дней рождений в формате ДД.ММ.ГГГГ. Вывести упорядоченный список месяцев с количеством дней рождений в этом месяце. ## Решение: ``` using System; using System.Collections.Generic; class Program { static void Main() { string[] birthdays = { "15.05.1990", "22.03.1985", "10.05.1992", "03.07.1978", "18.03.1990" }; Dictionary monthCount = new Dictionary(); foreach (var birthday in birthdays) { DateTime date = DateTime.ParseExact(birthday, "dd.MM.yyyy", null); int month = date.Month; if (monthCount.ContainsKey(month)) { monthCount[month]++; } else { monthCount[month] = 1; } } foreach (var kvp in monthCount) { Console.WriteLine($"Месяц: {kvp.Key}, количество дней рождений: {kvp.Value}"); } } } ``` ## Результат работы: ``` Месяц: 5, количество дней рождений: 2 Месяц: 3, количество дней рождений: 2 Месяц: 7, количество дней рождений: 1 ``` # Поиск наиболее популярного месяца: объявите массив произвольных дат в формате ДД.ММ.ГГГГ. Найдите самый популярный месяц. ## Решение: ``` using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { string[] dates = { "15.03.2023", "22.06.2023", "10.03.2023", "05.03.2023", "18.06.2023", "12.06.2023", "25.03.2023" }; List parsedDates = new List(); foreach (string date in dates) { if (DateTime.TryParseExact(date, "dd.MM.yyyy", null, System.Globalization.DateTimeStyles.None, out DateTime parsedDate)) { parsedDates.Add(parsedDate); } else { Console.WriteLine($"Дата {date} имеет некорректный формат и будет пропущена."); } } var groupedByMonth = parsedDates.GroupBy(d => d.Month) .OrderByDescending(g => g.Count()); var mostPopularMonth = groupedByMonth.First(); string monthName = new DateTime(1, mostPopularMonth.Key, 1).ToString("MMMM"); int count = mostPopularMonth.Count(); Console.WriteLine($"Самый популярный месяц: {monthName}, количество дат: {count}"); } } ``` ## Результат работы: ``` Самый популярный месяц: март, количество дат: 4 ``` # Пятница, 13-е. Докажите, что 13-е число месяца чаще всего приходится на пятницу. Напишите программу, которая выводит на экран 7 чисел: вероятности выпадения 13 числа каждого месяца на понедельник, вторник, среду, четверг, пятницу, субботу, воскресенье. ## Решение: ``` using System; class Program { static void Main() { int totalDays = 0; int friday13Count = 0; int[] daysOfWeekCount = new int[7]; for (int year = 2000; year <= 2030; year++) // Проверяем период с 2000 по 2030 год { for (int month = 1; month <= 12; month++) // Проверяем каждый месяц { int daysInMonth = DateTime.DaysInMonth(year, month); totalDays += daysInMonth; DateTime thirteenthDay = new DateTime(year, month, 13); DayOfWeek dayOfWeek = thirteenthDay.DayOfWeek; if (dayOfWeek == DayOfWeek.Friday) { friday13Count++; } daysOfWeekCount[(int)dayOfWeek]++; } } Console.WriteLine("Вероятности выпадения 13 числа каждого месяца на:"); string[] dayNames = Enum.GetNames(typeof(DayOfWeek)); for (int i = 0; i < daysOfWeekCount.Length; i++) { double probability = (double)daysOfWeekCount[i] / totalDays; Console.WriteLine($"{dayNames[i]}: {probability:P}"); } double friday13Probability = (double)friday13Count / totalDays; Console.WriteLine($"Вероятность выпадения 13 числа на пятницу: {friday13Probability:P}"); } } ``` ## Результат работы: ``` Вероятности выпадения 13 числа каждого месяца на: Sunday: 0,47 % Monday: 0,46 % Tuesday: 0,47 % Wednesday: 0,48 % Thursday: 0,48 % Friday: 0,47 % Saturday: 0,47 % Вероятность выпадения 13 числа на пятницу: 0,47 % ``` # На одном из московских вокзалов билеты продают N касс. Каждая касса работает без перерыва определенный промежуток времени по фиксированному расписанию. Требуется определить, в какой промежуток времени работает наибольшее количество касс. (на входе в программу строка вида 00:00-01:00,00:30-02:30,...) ## Решение: ``` using System; using System.Collections.Generic; class Program { static void Main() { string input = "00:00-01:00,00:30-02:30,01:30-03:00,02:00-04:00"; // Пример входных данных string[] schedules = input.Split(','); Dictionary timeCounts = new Dictionary(); foreach (string schedule in schedules) { string[] parts = schedule.Split('-'); string startTimeStr = parts[0]; string endTimeStr = parts[1]; DateTime startTime = DateTime.ParseExact(startTimeStr, "HH:mm", null); DateTime endTime = DateTime.ParseExact(endTimeStr, "HH:mm", null); for (DateTime time = startTime; time < endTime; time = time.AddMinutes(30)) { int hour = time.Hour; if (!timeCounts.ContainsKey(hour)) { timeCounts[hour] = 0; } timeCounts[hour]++; } } int maxCount = 0; int maxHour = 0; foreach (var pair in timeCounts) { if (pair.Value > maxCount) { maxCount = pair.Value; maxHour = pair.Key; } } Console.WriteLine($"Наибольшее количество касс работает в промежуток времени с {maxHour}:00 до {maxHour + 1}:00."); } } ``` ## Результат работы: ``` Наибольшее количество касс работает в промежуток времени с 2:00 до 3:00. ``` # Для заданного года посчитайте количество выходных дней в этом году (то есть количество суббот и воскресений). ## Решение: ``` using System; class Program { static void Main() { int year = 2022; // Заданный год int countWeekends = CountWeekends(year); Console.WriteLine($"Количество выходных дней в {year} году: {countWeekends}"); } static int CountWeekends(int year) { int countWeekends = 0; DateTime startDate = new DateTime(year, 1, 1); DateTime endDate = new DateTime(year, 12, 31); for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) { if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) { countWeekends++; } } return countWeekends; } } ``` ## Результат работы: ``` Количество выходных дней в 2022 году: 105 ```