Я только начал изучать программирование, поэтому я прошу вашего понимания;) программа проверки принимает только несколько тестов для остальных, выдает ошибку незаконного системного вызова, и у меня нет идей, как «откусить это».
задача: (ВНИМАНИЕ, программа должна экономить память) написать программу, которая найдет в квадратной матрице диагональ с наибольшей суммой диагоналей элементов (только справа).как на картинке https://i.stack.imgur.com/Cex9o.jpg
МАКС. ВРЕМЯ: 1 с, МАКС. память использует 3 МБ;вход: в первой строке есть натуральное число n (не более 1000), обозначающее размер матрицы A. В каждой из следующих n строк есть последовательность из n целых чисел (из диапазона -10000..10000)- это элементы следующей строки матрицы A.
output: необходимо записать два числа:
* номер диагональной матрицы A с наибольшей суммой элементов (еслиЕсть несколько таких чисел, наименьшее из них должно быть напечатано), * значение этой суммы.
примерно так: https://i.stack.imgur.com/bM7AP.jpg
Я подозреваю, что программа превышает 3 МБ памяти, поэтому он не проходит несколько тестов и выдает ошибку недопустимого системного вызова.Я понятия не имею, как лучше решить эту задачу, поэтому, пожалуйста, помогите мне;)
#include <iostream>
using namespace std;
int main(){
short length;
short counter=0;
short which=0;
int largest_sum=-10000000;
int sum=0;
cin>>length;
//matrix declaration
short **matrix = new short*[length];
for(short row=0; row<length; row++){
matrix[row] = new short [length];
}
//filling the matrix
for(short row=0; row<length; row++){
for(int column=0; column<length; column++){
cin>>matrix[row][column];
}
}
//calculating the sum of diagonals and choosing the largest one (half of all diagonals)
for(short row=length-1; row>=0; row--){
short r=row;
short c=0;
while(r<length){
sum+=matrix[r][c];
r=r+1;
c=c+1;
}
++counter;
if(sum>largest_sum){
largest_sum=sum;
which=counter;
}
sum=0;
}
//calculating the sum of diagonals and choosing the largest one (second half of all diagonals)
for(short row=1; row<length; row++){
short r=0;
short c=row;
while(c<length){
sum+=matrix[r][c];
r=r+1;
c=c+1;
}
++counter;
if(sum>largest_sum){
largest_sum=sum;
which=counter;
}
sum=0;
}
//removing from memory
for(short i=0; i<length; i++){
delete [] matrix[i];
}
delete [] matrix;
//score
cout<<which<<" "<<largest_sum;
return 0;
}
мой код: https://ideone.com/6Qd1yF