Sem descrição

vyakimova 181e6c33c4 brat makaki há 8 meses atrás
.idea 181e6c33c4 brat makaki há 8 meses atrás
gitignore.txt b1eb6d37ef что это há 10 meses atrás
readme.md 181e6c33c4 brat makaki há 8 meses atrás

readme.md

Дан текста на русском языке. Напечатать в алфавитном порядке все звонкие согласные буквы, которые входят более чем в одно слово.

Решение:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        string text = "Дан текст на русском языке. Напечатать на алфавитном порядке все звонкие согласные буквы, которые входят более чем в одно слово.";
        var vowels = new HashSet<char> { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
        var consonants = new Dictionary<char, int>();

        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<DateTime> dates = new List<DateTime>();

        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<int, int> monthCount = new Dictionary<int, int>();

        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<DateTime> parsedDates = new List<DateTime>();
        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<int, int> timeCounts = new Dictionary<int, int>();

        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