← Повернутись назад

Задачі на C# з поясненнями

Методичка з розв'язанням алгоритмічних задач та підсвічуванням коду

Задача 1: Пошук першого двозначного числа з різними цифрами

Умова задачі:

Введіть з клавіатури n цілих чисел. Знайти серед цих чисел перше двозначне число, яке складається з різних цифр та його порядковий номер. Якщо таких чисел немає, то вивести NO.

Алгоритм розв'язання:

  1. Отримати кількість чисел n від користувача
  2. Для кожного числа від 1 до n:
    • Зчитати число з клавіатури
    • Перевірити, чи є число двозначним (10 ≤ число ≤ 99)
    • Якщо так, перевірити, чи складається воно з різних цифр
    • Якщо умови виконуються, запам'ятати число та його номер
  3. Вивести результат або "NO", якщо число не знайдено
Program.cs - Розв'язання задачі 1 C#
using System;

class Program
{
    static void Main()
    {
        // Введення кількості чисел
        Console.Write("Введіть кількість чисел n: ");
        int n = int.Parse(Console.ReadLine());
        
        int resultNumber = 0;
        int resultIndex = 0;
        bool found = false;
        
        // Обробка кожного числа
        for (int i = 1; i <= n; i++)
        {
            Console.Write($"Введіть число {i}: ");
            int number = int.Parse(Console.ReadLine());
            
            // Перевірка, чи є число двозначним
            if (number >= 10 && number <= 99)
            {
                // Отримання цифр числа
                int firstDigit = number / 10;
                int secondDigit = number % 10;
                
                // Перевірка, чи цифри різні
                if (firstDigit != secondDigit)
                {
                    resultNumber = number;
                    resultIndex = i;
                    found = true;
                    break; // Знайшли перше відповідне число - виходимо
                }
            }
        }
        
        // Виведення результату
        if (found)
        {
            Console.WriteLine($"Результат: число {resultNumber}, порядковий номер {resultIndex}");
        }
        else
        {
            Console.WriteLine("NO");
        }
        
        Console.ReadKey();
    }
}
                   

🔍 Пояснення ключових моментів:

  • Перевірка двозначності: number >= 10 && number <= 99
  • Отримання цифр: перша цифра - number / 10, друга - number % 10
  • Перевірка різних цифр: firstDigit != secondDigit
  • Оператор break: вихід з циклу після знаходження першого відповідного числа

📝 Приклад виконання:

Вхідні дані:
n = 5
Числа: 45, 23, 11, 67, 89

Результат:
Число 45, порядковий номер 1

Пояснення: 45 - перше двозначне число з різними цифрами (4 ≠ 5)

Задача 2: Пошук останнього числа в інтервалі, кратного b

Умова задачі:

Введіть з клавіатури n цілих чисел. Знайти серед цих чисел останнє число, яке належить інтервалу [x, y] та кратне b та його порядковий номер. Якщо таких чисел немає, то вивести NO.

Алгоритм розв'язання:

  1. Отримати n, x, y, b від користувача
  2. Для кожного числа від 1 до n:
    • Зчитати число з клавіатури
    • Перевірити, чи належить число інтервалу [x, y]
    • Перевірити, чи кратне число b
    • Якщо умови виконуються, запам'ятати число та його номер
  3. Вивести останнє знайдене число або "NO"
Program.cs - Розв'язання задачі 2 C#
using System;

class Program
{
    static void Main()
    {
        // Введення даних
        Console.Write("Введіть кількість чисел n: ");
        int n = int.Parse(Console.ReadLine());
        
        Console.Write("Введіть x: ");
        int x = int.Parse(Console.ReadLine());
        
        Console.Write("Введіть y: ");
        int y = int.Parse(Console.ReadLine());
        
        Console.Write("Введіть b: ");
        int b = int.Parse(Console.ReadLine());
        
        int resultNumber = 0;
        int resultIndex = 0;
        bool found = false;
        
        // Обробка кожного числа
        for (int i = 1; i <= n; i++)
        {
            Console.Write($"Введіть число {i}: ");
            int number = int.Parse(Console.ReadLine());
            
            // Перевірка умов
            if (number >= x && number <= y && number % b == 0)
            {
                resultNumber = number;
                resultIndex = i;
                found = true;
            }
        }
        
        // Виведення результату
        if (found)
        {
            Console.WriteLine($"Результат: число {resultNumber}, порядковий номер {resultIndex}");
        }
        else
        {
            Console.WriteLine("NO");
        }
        
        Console.ReadKey();
    }
}
                   

🔍 Пояснення ключових моментів:

  • Перевірка інтервалу: number >= x && number <= y
  • Перевірка кратності: number % b == 0
  • Пошук останнього: не використовуємо break, оновлюємо результат для кожного відповідного числа

📝 Приклад виконання:

Вхідні дані:
n = 4, x = 10, y = 30, b = 5
Числа: 15, 25, 12, 20

Результат:
Число 20, порядковий номер 4

Пояснення: 20 - останнє число в інтервалі [10,30], кратне 5

Задача 3: Робота з випадковими числами

Умова задачі:

Одержати у програмі k випадкових цілих чисел у діапазоні від A до B та знайти кількість тих, що > C. Числа A (10<=A<=20), B(25<=B<=40), C (15<=C<=30) та k (10<=k<=15) одержати випадковим чином.

Алгоритм розв'язання:

  1. Згенерувати випадкові значення A, B, C, k в заданих діапазонах
  2. Згенерувати k випадкових чисел у діапазоні [A, B]
  3. Підрахувати кількість чисел, більших за C
  4. Вивести результати
Program.cs - Розв'язання задачі 3 C#
using System;

class Program
{
    static void Main()
    {
        Random rand = new Random();
        
        // Генерація A, B, C, k у заданих діапазонах
        int A = rand.Next(10, 21);  // 10..20
        int B = rand.Next(25, 41);  // 25..40
        int C = rand.Next(15, 31);  // 15..30
        int k = rand.Next(10, 16);  // 10..15
        
        Console.WriteLine($"Згенеровані параметри:");
        Console.WriteLine($"A = {A}, B = {B}, C = {C}, k = {k}");
        Console.WriteLine();
        
        int countGreaterThanC = 0;
        
        Console.WriteLine("Згенеровані числа:");
        
        // Генерація k чисел та підрахунок
        for (int i = 0; i < k; i++)
        {
            int randomNumber = rand.Next(A, B + 1); // A..B включно
            Console.Write(randomNumber + " ");
            
            if (randomNumber > C)
            {
                countGreaterThanC++;
            }
        }
        
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine($"Кількість чисел більших за {C}: {countGreaterThanC}");
        
        Console.ReadKey();
    }
}
                

🔍 Пояснення ключових моментів:

  • Клас Random: для генерації випадкових чисел
  • Next(min, max): генерує числа від min до max-1
  • Діапазони: A∈[10,20], B∈[25,40], C∈[15,30], k∈[10,15]
  • Увага!: Next(A, B+1) для включення B у діапазон

📝 Приклад виконання:

Можливі результати:
A = 15, B = 35, C = 22, k = 12
Числа: 18 25 30 32 28 19 23 27 31 29 26 24
Кількість чисел > 22: 9

Задача 4: Пошук найменшого тризначного та найбільшого двозначного

Умова задачі:

Одержати випадковим чином 20 цілих чисел (від 50 до 150) та вивести їх на екран. Знайти серед них найменше тризначне число та найбільше двозначне число. Якщо є декілька таких чисел, то визначте порядкові номери останніх з них. Якщо немає таких чисел, то вивести повідомлення.

Алгоритм розв'язання:

  1. Згенерувати 20 випадкових чисел у діапазоні [50, 150]
  2. Знайти найменше тризначне число (100-150) та його останній номер
  3. Знайти найбільше двозначне число (50-99) та його останній номер
  4. Вивести результати
Program.cs - Розв'язання задачі 4 C#
using System;

class Program
{
    static void Main()
    {
        Random rand = new Random();
        int[] numbers = new int[20];
        
        Console.WriteLine("Згенеровані числа:");
        
        // Генерація та виведення чисел
        for (int i = 0; i < 20; i++)
        {
            numbers[i] = rand.Next(50, 151); // 50..150
            Console.Write(numbers[i] + " ");
            
            if ((i + 1) % 10 == 0) // Перехід на новий рядок кожні 10 чисел
                Console.WriteLine();
        }
        Console.WriteLine();
        
        // Пошук найменшого тризначного числа та його останнього номера
        int minThreeDigit = int.MaxValue;
        int lastIndexThreeDigit = -1;
        
        // Пошук найбільшого двозначного числа та його останнього номера
        int maxTwoDigit = int.MinValue;
        int lastIndexTwoDigit = -1;
        
        for (int i = 0; i < 20; i++)
        {
            // Перевірка для тризначних чисел (100-150)
            if (numbers[i] >= 100 && numbers[i] <= 150)
            {
                if (numbers[i] <= minThreeDigit)
                {
                    minThreeDigit = numbers[i];
                    lastIndexThreeDigit = i + 1; // +1 для порядкового номера
                }
            }
            
            // Перевірка для двозначних чисел (50-99)
            if (numbers[i] >= 50 && numbers[i] <= 99)
            {
                if (numbers[i] >= maxTwoDigit)
                {
                    maxTwoDigit = numbers[i];
                    lastIndexTwoDigit = i + 1; // +1 для порядкового номера
                }
            }
        }
        
        // Виведення результатів
        Console.WriteLine("Результати:");
        
        if (lastIndexThreeDigit != -1)
        {
            Console.WriteLine($"Найменше тризначне число: {minThreeDigit}, останній номер: {lastIndexThreeDigit}");
        }
        else
        {
            Console.WriteLine("Тризначних чисел не знайдено");
        }
        
        if (lastIndexTwoDigit != -1)
        {
            Console.WriteLine($"Найбільше двозначне число: {maxTwoDigit}, останній номер: {lastIndexTwoDigit}");
        }
        else
        {
            Console.WriteLine("Двозначних чисел не знайдено");
        }
        
        Console.ReadKey();
    }
}
              

🔍 Пояснення ключових моментів:

  • Тризначні числа: 100-150 (включно)
  • Двозначні числа: 50-99 (включно)
  • Пошук останнього: оновлюємо індекс при знаходженні числа з такою ж величиною
  • Ініціалізація: використовуємо MaxValue/MinValue для коректного порівняння

Задача 5: Пошук взаємно простих чисел

Умова задачі:

Дано два натуральних числа A та В. Знайти перші 10 натуральних чисел, що більше за А та взаємно прості з В.

Алгоритм розв'язання:

  1. Отримати числа A та B від користувача
  2. Для чисел від A+1 до нескінченності:
    • Перевірити, чи є число взаємно простим з B (НСД = 1)
    • Якщо так, додати до результату
    • Зупинитись, коли знайдемо 10 чисел
  3. Вивести результати
Program.cs - Розв'язання задачі 5 C#
using System;

class Program
{
    // Функція для знаходження НСД (алгоритм Евкліда)
    static int GCD(int a, int b)
    {
        while (b != 0)
        {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
    
    // Функція перевірки взаємної простоти
    static bool AreCoprime(int a, int b)
    {
        return GCD(a, b) == 1;
    }
    
    static void Main()
    {
        // Введення даних
        Console.Write("Введіть число A: ");
        int A = int.Parse(Console.ReadLine());
        
        Console.Write("Введіть число B: ");
        int B = int.Parse(Console.ReadLine());
        
        Console.WriteLine($"Перші 10 чисел більших за {A}, взаємно простих з {B}:");
        
        int count = 0;
        int currentNumber = A + 1;
        
        // Пошук 10 взаємно простих чисел
        while (count < 10)
        {
            if (AreCoprime(currentNumber, B))
            {
                Console.Write(currentNumber + " ");
                count++;
            }
            currentNumber++;
        }
        
        Console.WriteLine();
        Console.ReadKey();
    }
}
              

🔍 Пояснення ключових моментів:

  • Взаємно прості числа: числа, у яких НСД = 1
  • Алгоритм Евкліда: ефективний спосіб знаходження НСД
  • Пошук чисел: перевіряємо числа послідовно, починаючи з A+1
  • Умовний оператор: currentNumber > A гарантовано, оскільки починаємо з A+1

📝 Приклад виконання:

Вхідні дані:
A = 15, B = 10

Результат:
17 19 21 23 27 29 31 33 37 39

Пояснення: Ці числа більші за 15 та взаємно прості з 10 (не мають спільних дільників з 10, крім 1)

💡 Математична довідка:

Два числа називаються взаємно простими, якщо їх найбільший спільний дільник (НСД) дорівнює 1. Наприклад, 15 і 28 - взаємно прості, оскільки НСД(15,28)=1.