Для заданной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали - C (СИ)
Формулировка задачи:
Для заданной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали.
скажите пожалуйста, что нужно изменить чтобы было не параллельных главной, а наоборот-побочной. Заранее спасибо.
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
int summa(int *ar,int n)
{
int m,j,i,k;
int S=0, Smax=-10000;
m=n;
for (j=1;j<n;j++)
{
k=0;
S=0;
for (i=0; i<m-1; i++)
{
S=S+(*(ar+i*n+j+k));
k++;
}
m--;
if (S>Smax) {Smax=S;}
}
m=n;
for (i=1;i<n;i++)
{
k=0;
S=0;
for (j=0; j<m-1; j++)
{
S=S+(*(ar+(i+k)*n+j));
k++;
}
m--;
if (S>Smax) {Smax=S;}
}
return Smax;
}
void main()
{
int i,j,n,Smax,k; //,p=-3,b=7;
int Pr[100];
int *a;
clrscr();
// randomize();
printf("vvedite razmernost matrici: ");
scanf("%d",&n);
printf("\n ");
a=(int*)malloc (n*n*sizeof(int));
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
// *(a+i*n+j)=random(b-p+1)+p;
// printf("%d\t", *(a+i*n+j));
printf("a[%d,%d]=",i+1,j+1);
scanf("%d",(a+i*n+j));
}
}
printf("\n ");
for(i=0;i<n;i++)Решение задачи: «Для заданной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали»
textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <Windows.h>
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
int _tmain(int argc, _TCHAR* argv[])
{
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int menu = 0;
do
{
srand(time(NULL));
int **a = NULL;
int height = 0;
int width = 0;
int temp = 0;
printf("Демонстрация работы с массивами\n");
printf("Введите размерность массива(ширина, высота): ");
scanf("%d %d", &width, &height );
a = new int*[height];
for (int i = 0; i < height; i = i+1)
{
a[i] = new int[width];
}
for (int i = 0; i < height; i = i+1)
{
for (int j = 0; j < width; j = j+1)
{
a[i][j] = rand() % 10;
}
}
for (int i = 0; i < height; i = i+1)
{
for (int j = 0; j< width; j = j+1)
{
printf("%d", a[i][j]);
}
printf("\n");
}
for (int i = 0; i < height; i = i+1)
{
delete [] a[i];
}
delete []a;
{
printf("Повторить? 1-ДА, 0-НЕТ");
scanf("%d" , &menu);
}
}
while (menu != 0);
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде:
- a - это динамический массив (массив указателей), который хранит указатели на подмассивы. Он инициализируется как NULL, а затем инициализируется новыми указателями на подмассивы.
- height и width - это переменные, которые хранят высоту и ширину матрицы соответственно. Они инициализируются вводом пользователя.
- temp - это временная переменная, которая используется в цикле для временного хранения значения.
- printf и scanf - это функции ввода-вывода, используемые для отображения и ввода данных соответственно.
- srand и rand - это функции для инициализации и генерации случайных чисел соответственно.
- new и delete - это операторы динамического выделения и освобождения памяти соответственно.
- menu - это переменная, которая используется в цикле do-while для контроля повторения программы.
- getchar - это функция для получения символа ввода из консоли.
- return 0 - это оператор, который указывает на успешный конец выполнения программы.