【发布时间】:2020-11-09 21:37:25
【问题描述】:
所以,我的程序可以正常工作,但前提是最小和最大元素在对角。 所以我的问题是如何将二维数组从一个特定元素迭代到另一个元素(也许摆脱一些嵌套循环)。我要把这个数组转换成一维吗?
这是代码的正确工作:
这是出现问题的时候。元素 {0}{1} 和 {1}{1} 丢失了。
这是代码的缩短变体:
#include <iostream>
using namespace std;
void matrix_count(int a[5][5],int min, int max, int min_i, int min_j, int max_i, int max_j) {
int suma = 0;
int counter = 0;
if (min_i <= max_i && min_j <= max_j) {
for (int i = 0; i < 5; i++) { //iterating all matrix
for (int j = 0; j < 5; j++) {
if (a[i][j] == min) { //start a new cycle when find min
for (int i = min_i; i < 5; i++) {
for (int j = min_j; j < 5; j++) {
if (a[i][j] == max) { i = 5; break; }
else if (a[i][j] != min) {
counter++;
suma += a[i][j];
cout << a[i][j] << " ";
}
}
}
}
}
}
}
else if (min_i >= max_i && min_j <= max_j) {} // min[i]<max[i] min[j]<max[j]
else if (min_i <= max_i && min_j >= max_j) {} // min[i]<max[i] min[j]>max[j]
else if (min_i >= max_i && min_j >= max_j) {} // min[i]>max[i] min[j]>max[j]
cout << endl;
cout << suma << endl;
cout << counter << endl;
}
int main()
{
int a[5][5] = {
{0,4,6,3,5},
{7,1,5,6,2},
{6,8,8,5,2},
{4,1,5,2,2},
{4,3,6,5,9} };
int min = a[0][0];
int max = a[0][0];
int max_i = 0;
int min_i = 0;
int max_j = 0;
int min_j = 0;
// finding the max
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (a[i][j] > max) {
max = a[i][j];
max_i = i;
max_j = j;
}
}
}
// finding the min
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (a[i][j] < min) {
min = a[i][j];
min_i = i;
min_j = j;
}
}
}
matrix_count(a, min, max, min_i, min_j, max_i, max_j);
return 0;
}
【问题讨论】:
-
"我的问题是如何将二维数组从一个特定元素迭代到另一个元素(也许还可以摆脱一些嵌套循环)。" - 请把它分解为少量。 - 另外:把你的代码变成minimal reproducible example。
-
所以我的问题是如何将二维数组从一个特定元素迭代到另一个元素 -- 鉴于你拥有的数组类型,它与你拥有一个一维数组,因为二维数组在连续内存中具有数据布局。这只是弄清楚起始索引和结束索引的问题。例如,该数组实际上是
7 6 0 3 5 7 1 5 9 2 6 8 8 5 2 4 1 5 2 2 4 3 6 5 9。另外,请将数据作为文本发布,而不是作为图像发布。 -
elements {0}{1} and {1}{1} got lost尚不清楚如何将{0}{1}视为“介于最小和最大元素之间”。这里的“介于”到底是什么意思? -
仅供参考:我看不到您显示的任何图片。介意以纯文本形式分享?
-
整个程序只需要一个循环就可以实现,忘记它是二维的,使用指针遍历矩阵。在评估每个元素时存储 min,max,sum。应该有一堆 if in-place 来实现逻辑。既然在我看来这是一个家庭作业,我想我不应该写它,对吧?祝你好运。