Тренировочные задания: Одномерные массивы
Десять задач на обход массива, поиск минимума и максимума, удаление элементов и сортировку.
Задача 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;
}