Skip to content

Двумерный массив. Задача 2

Доброго времени суток! Сразу напомню, что с вами автор, который пишет коды для 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. После этого банальным методом находим минимальный элемент в массиве.

Вот и всё =)

Скачать исходники

Опубликовано вC++

Будьте первым, кто оставит комментарий

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *