Доброго времени суток! Сразу напомню, что с вами автор, который пишет коды для Linux. Сегодня продолжим говорить о двумерных массивах и разберём такой пример:
Дана целочисленная квадратичная матрица. Определить:
1) Сумму элементов в тех строках, которые НЕ содержат хотя бы один отрицательный элемент
2) Минимум среди сумм элементов диагоналей, параллельных побочной диагонали матрицы.
Как видите, задача небольшая. Поехали!
#include <cstdlib> #include <iostream> #include <ctime> #include <cstring> using namespace std; int main(void){ int static N = 10; int mas[N][N]; int i, j; srand(time(0)); for (i = 0; i < N; i++){ for (j = 0; j < N; j ++){ mas[i][j] = rand() % 21 - 2; cout << mas[i][j] << " "; } cout << "\n"; }
Тут всё просто: объявляем двумерный массив и записываем в него «рандомные» значения, НО задаём интервал от -1 до 20, потому что, если будет много отрицательных элементов, мы не сможем выполнить 1 задание.
int sum= 0, count = 0; for (i = 0; i < N; i++){ for (j = 0;j < N; j ++){ if (mas[i][j] < 0) count += 1; } if (count == 0){ for (j = 0;j < N; j ++){ sum = sum + mas[i][j]; } } count = 0; } cout <<"Сумма = " << sum << "\n";
В этом куске кода мы находим сумму по заданию 1. Алгоритм: запускаем цикл по i и в нём запускаем цикл по j, в котором проверяем на наличие отрицательных элементов в строке, если таковы имеются, изменяем count. Далее задаём условие, если count не изменялось ( = 0 ), то запускаем ещё один цикл по j, в котором уже суммируем элементы в строке.
int summa[N]; memset(summa,0,sizeof(summa)); int k; for (k = 0 ;k < N; k++){ for (i = 0; i < N; i++){ for (j = 0; j < N; j ++){ if (i + j == k) summa[k] += mas[i][j]; } } } int min = summa[0]; for (k = 0; k < 10; k++){ if ((k != N/2 - 1) && min > summa[k] ) min = summa[k]; } cout <<"Минимальная сумма по диагоналям = " << min << "\n"; }
В этом отрывке мы работаем над заданием 2.
memset() — функция, которая в данном случаем нужна для обнуления всего массива.
Алгоритм: инициализируем массив summa[], в котором мы будем хранить суммы диагоналей. С помощью «тройного» цикла мы задаём элементы для массива summa[], замечу что для проверки принадлежности элемента к той или иной диагонали используется условие i + j == k. После этого банальным методом находим минимальный элемент в массиве.
Вот и всё =)
Скачать исходники
Будьте первым, кто оставит комментарий