c++ - 如何修复代码中的分段错误?
问题描述
样本输入
3
11 2 4
4 5 6
10 8 -12
样本输出
15
解释
主对角线是:
11
5
-12
主对角线总和:11 + 5 - 12 = 4
次对角线是:
4
5
10
对角线的总和:4 + 5 + 10 = 19
差:|4 - 19| = 15
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int i, j;
int arr[i][j];
int x1 = 0, x2 = 0;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; ++j)
{
cin >> arr[i][j];
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == j)
x1 = x1 + arr[i][j];
}
}
for (i = 1; i <= n; i++)
{
for (j = n; j <= 1; j--)
{
x2 = x2 + arr[i][j];
}
}
cout << abs(x1 - x2);
}
解决方案
这是您更正的代码:
1) 首先,您已经声明了一个垃圾大小的二维数组。
2) 其次,在除 MATLAB 之外的大多数编程语言中,数组索引都是从 0 开始的。
3) 始终使用预增量,除非后增量不是绝对必要的。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int i, j;
int arr[n][n];
int x1 = 0, x2 = 0;
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
{
cin >> arr[i][j];
}
}
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
{
if (i == j)
x1 += arr[i][j];
}
}
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
{
if(i + j == n - 1)
x2 += arr[i][j];
}
}
cout << abs(x1 - x2);
return 0;
}
PS:您的代码格式有很多改进范围。
推荐阅读
- xcode - 无法创建着色器调试会话
- django - django-allauth 社交登录的 Axios POST 请求无法正常工作?
- reactjs - 为什么我的本地反应应用程序的默认端口是 8080?
- javascript - 无法捕获跨度文本。试图从以前执行的 javascript 返回结果
- javascript - 使用 Javascript 导航方法时检测到错误的语言
- reactjs - 如何将对象数据数组推送到另一个具有匹配 uid 的数组中
- java - 如何为这个 void 方法编写测试用例?
- javascript - CSS flex display 与 Chrome 中相同的 flex 项目的行为不同
- apache - 使用 Apache 配置设置 SameSite 不起作用
- javascript - 计算重复项并返回所有在 javascript 中删除重复项的字段