我想在二维数组上对角迭代。我使用[N*N]
大小的普通数组,而不是使用[N][N]
数组。之后,我生成索引。
这是我要打印的数组(例如)
1 3 6 10
2 5 9 13
4 8 12 15
7 11 14 16
结果应该是这样的:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
我已完成以下代码:
int n, temp[2], nums[100 + 10];
cin >> n;
for (int i = 0; i < n * n; i++)
cin >> nums[i];
temp[0] = temp[1] = 0;
for (int i = 0, cnt = 0; i < n; i++, cnt += 5) {
temp[1] = temp[0];
for (int j = 0; j <= i; j++) {
cout << nums[temp[1]] << " ";
temp[1] -= n - 1;
}
temp[0] += n;
}
temp[0] -= n - 1;
for (int i = n - 2, cnt = temp[0]; i >= 0; i--, cnt -= 5) {
temp[1] = temp[0];
for (int j = 0; j <= i; j++) {
cout << nums[temp[1]] << " ";
temp[1] -= n - 1;
}
temp[0] += 1;
}
我认为它应该可以工作,但我不知道为什么我会遇到访问冲突的运行时错误。 感谢。
答案 0 :(得分:1)
在您的链接1 ≤ N ≤ 100
中,这意味着nums
数组应该能够存储最多100 * 100 = 10000个值。
答案 1 :(得分:1)
反正:
该网站声明1&lt; = N&lt; = 100 ,这意味着您需要的最大阵列是
max(N*N)
,即10,000个整数。您发布的代码已经为110个整数元素分配了数组,这显然是不够的。
在第一个for循环中读取输入数字时可能会发生访问冲突,因为i
转到n*n
,这可能大于数组的大小。
答案 2 :(得分:0)
首先是我的朋友,你使用哪个编译器? 如果是borland的turbo,那么你可能想切换到另一个,因为这是我经历过的常见错误。 你的代码似乎是正确的,通过在Code :: Blocks中执行相同的代码(copy-pasting),我得到了你提到的输出。所以,你的程序是正确的。