C/C++

Код на c++ выводит неправильную сумму элементов побочной диагонали двумерного массива

#include <iostream>
using namespace std;
int main() {
int sum4=0;
const int n=4;
int arr[n][n]={{-1,8,9,11},{5,6,7,-10},{3,-3,2,5},{-3,9,3,2}};
for(int i=0;i<=3;i++)
{
for(int j=0;j<=3;j++)
{

if(n==i+j-1)
{
sum4=sum4=arr[i][j];
}
cout << arr[i][j] << " ";
}
cout << endl;

}
cout << sum4;
return 0;
}


ответ должен быть равен 12
В предоставленном коде на C++ есть несколько проблем, которые приводят к тому, что он печатает неправильную сумму элементов боковой диагонали двумерного массива.

Во-первых, переменная n используется в условии n==i+j-1, когда должно быть n-1==i+j. Это происходит потому, что боковая диагональ состоит из элементов, где индекс строки плюс индекс столбца равны n-1 (при условии нулевого индекса).

Во-вторых, в строке, где вычисляется sum4, допущена опечатка. Вместо того чтобы добавить arr[i][j] к sum4, он присваивается к sum4 дважды, что приводит к неправильной сумме.

Вот исправленный код:#include <iostream>
using namespace std;

int main() {
int sum4 = 0;
const int n = 4;
int arr[n][n] = {{-1, 8, 9, 11}, {5, 6, 7, -10}, {3, -3, 2, 5}, {-3, 9, 3, 2}};

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (n - 1 == i + j) { // condition for side diagonal
sum4 += arr[i][j]; // corrected sum calculation
}
cout << arr[i][j] << " ";
}
cout << endl;
}

cout << sum4;
return 0;
}
Евгений Гераськин
Евгений Гераськин
11 134
Лучший ответ
Максим Лукьянчиков Спасибо, посмеялся.
 for (int i = 0; i < n; ++i) {
sum4 += arr[i][n - i - 1];
cout
#include <iostream>
using namespace std;

int main() {
int sum4=0;
const int n=4;
int arr[n][n]={{-1,8,9,11},{5,6,7,-10},{3,-3,2,5},{-3,9,3,2}};
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(i+j == n-1) {
sum4 += arr[i][j];
}
cout << arr[i][j] << " ";
}
cout << endl;
}
cout << sum4;
return 0;
}