我刚刚开始学习编程,所以我要求你的理解;)检查程序只接受几个测试,其余的抛出错误非法系统调用,我不知道如何&# 34;咬它"。
任务:(注意,程序应该节省内存)编写一个程序,它将在方阵中找到一个对角线具有最大元素对角线的对角线(仅右侧)。就像在图片中一样 https://i.stack.imgur.com/Cex9o.jpg
MAX TIME:1s,MAX内存使用3MB; 输入: 在第一行中有一个自然数n(不大于1000)表示矩阵A的大小。在以下n行的每一行中都有一个n个整数的序列(范围-10000..10000) - 这些是矩阵A的下一行的元素。
输出: 你应该写两个数字:
*对角矩阵A的数量,具有最大的元素总和(如果有多个这样的数字,则应打印最小的数字), *这笔金额的价值。
像这样: https://i.stack.imgur.com/bM7AP.jpg我怀疑该程序超过了所需的3MB内存,所以它没有通过一些测试并抛出非法的系统调用错误。我不知道如何更好地解决这个问题所以请帮助我;)
#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;
}
答案 0 :(得分:1)
改善当前解决方案的一些提示:(内存消耗~2 MB)
替代解决方案:(内存消耗~10 kB)