Тренировочные задания: Одномерные массивы

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

Задача 1. Сумма элементов

Считайте N и N целых чисел, выведите их сумму.

Пример ввода:

4
1 2 3 4

Пример вывода:

10
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    if (scanf("%d", &n) != 1 || n < 1 || n > 100)
    {
        printf("Ошибка ввода\n");
        return 1;
    }
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    int sum = 0;
    for (int i = 0; i < n; i++) sum += a[i];
    printf("%d\n", sum);
    return 0;
}

Задача 2. Минимум и максимум

Выведите минимальный и максимальный элементы массива.

Пример ввода:

5
4 -1 7 0 7

Пример вывода:

min = -1, max = 7
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    int mn = a[0], mx = a[0];
    for (int i = 1; i < n; i++)
    {
        if (a[i] < mn) mn = a[i];
        if (a[i] > mx) mx = a[i];
    }
    printf("min = %d, max = %d\n", mn, mx);
    return 0;
}

Задача 3. Среднее и количество выше среднего

Выведите среднее арифметическое (2 знака) и сколько элементов больше него.

Пример ввода:

5
1 2 3 4 5

Пример вывода:

3.00
2
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        sum += a[i];
    }
    double avg = (double)sum / n;
    int count = 0;
    for (int i = 0; i < n; i++) if (a[i] > avg) count++;
    printf("%.2f\n%d\n", avg, count);
    return 0;
}

Задача 4. Разворот массива

Выведите массив в обратном порядке, поменяв элементы местами на месте.

Пример ввода:

5
1 2 3 4 5

Пример вывода:

5 4 3 2 1
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    for (int i = 0; i < n / 2; i++)
    {
        int t = a[i];
        a[i] = a[n - 1 - i];
        a[n - 1 - i] = t;
    }
    for (int i = 0; i < n; i++) printf("%d%c", a[i], i + 1 < n ? ' ' : '\n');
    return 0;
}

Задача 5. Только чётные

Выведите все чётные элементы в исходном порядке через пробел.

Пример ввода:

6
1 2 3 4 5 6

Пример вывода:

2 4 6
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    int first = 1;
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if (a[i] % 2 == 0)
        {
            if (!first) printf(" ");
            printf("%d", a[i]);
            first = 0;
        }
    }
    printf("\n");
    return 0;
}

Задача 6. Второй максимум

Найдите второй по величине элемент (элементы могут повторяться).

Пример ввода:

5
1 5 3 5 2

Пример вывода:

5
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    int mx = a[0], second = a[0];
    for (int i = 1; i < n; i++)
    {
        if (a[i] > mx)
        {
            second = mx;
            mx = a[i];
        }
        else if (a[i] > second && a[i] != mx)
        {
            second = a[i];
        }
    }
    printf("%d\n", second);
    return 0;
}

Задача 7. Удалить нули

Удалите нулевые элементы, сохранив порядок остальных, и выведите новый массив.

Пример ввода:

6
0 1 0 2 3 0

Пример вывода:

1 2 3
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    int k = 0;
    for (int i = 0; i < n; i++)
    {
        if (a[i] != 0) a[k++] = a[i];
    }
    for (int i = 0; i < k; i++) printf("%d%c", a[i], i + 1 < k ? ' ' : '\n');
    return 0;
}

Задача 8. Частота числа

Считайте N, массив и число X: сколько раз X встречается в массиве?

Пример ввода:

6
1 2 2 3 2 4
2

Пример вывода:

3
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100], x;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    scanf("%d", &x);
    int count = 0;
    for (int i = 0; i < n; i++) if (a[i] == x) count++;
    printf("%d\n", count);
    return 0;
}

Задача 9. Проверка возрастания

Проверьте, что массив строго возрастает. Выведите «да» или «нет».

Пример ввода:

4
1 3 5 9

Пример вывода:

да
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    for (int i = 1; i < n; i++)
    {
        if (a[i] <= a[i - 1])
        {
            printf("нет\n");
            return 0;
        }
    }
    printf("да\n");
    return 0;
}

Задача 10. Пузырьковая сортировка

Отсортируйте массив по возрастанию методом пузырька и выведите его.

Пример ввода:

5
5 1 4 2 3

Пример вывода:

1 2 3 4 5
Решение
#include <stdio.h>

int main(void)
{
    int n, a[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    for (int pass = 0; pass < n - 1; pass++)
    {
        for (int j = 0; j < n - 1 - pass; j++)
        {
            if (a[j] > a[j + 1])
            {
                int t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (int i = 0; i < n; i++) printf("%d%c", a[i], i + 1 < n ? ' ' : '\n');
    return 0;
}

Подтверждение

—