【问题标题】:Finding largest 2x2 average in a 2D Array在二维数组中找到最大的 2x2 平均值
【发布时间】:2015-10-31 19:35:18
【问题描述】:

我正在尝试在矩阵中找到最大的 2x2 平均值。我找到了一个与我分享similar problem 的人,但是他们的解决方案不起作用。

下面是我的代码:

//Part B
        //Finding deepest 2x2 area
            int rowX, colX, ac1Row, ac1Col, ac2Row, ac2Col, ac3Row, ac3Col, ac4Row, ac4Col;
            float largestArea = 0;
            for(rowX = 0; rowX < dataRow - 1; rowX++){
                for(colX = 0; colX < dataCol - 1; colX++){

                    float area = (oceanData[rowX][colX] + oceanData[rowX][colX + 1] + oceanData[rowX + 1][colX] + oceanData[rowX + 1][colX + 1]) / 4;
                    if(largestArea < area){
                        largestArea = area;
                        int ac1Row = rowX; int ac1Col = colX;
                        int ac2Row = rowX; int ac2Col = colX + 1;
                        int ac3Row = rowX + 1; int ac3Col = colX;
                        int ac4Row = rowX + 1; int ac4Col = colX + 1;
                    }
                }
            }
            //Display results
            cout << endl << "The deepest 2x2 area is: " << largestArea << " m" << endl;
            cout << endl << "The coordinates are: (" << ac1Row << "," << ac1Col << ")" << " " << "(" << ac2Row << "," << ac2Col << ")";
            cout << "(" << ac3Row << "," << ac3Col << ")" << "(" << ac4Row << "," << ac4Col << ")" << endl;

我正在使用 .txt 文件,其数据为 6 x 6(数据存储在 oceanData 中,大小存储在 dataRow 和 dataCol 中)但是,当我尝试输出坐标我得到奇怪的数字: 例如。

The coordinates are: (4356788,0),(0,0),(0,0),(8,0)

有人知道我的问题在哪里吗? 谢谢!

【问题讨论】:

  • 您在if 的范围内声明了新变量acRow ...等。您不需要在它们之前使用关键字int
  • 好消息……它总是您想念的简单的东西!这实际上解决了它,谢谢!

标签: c++ arrays loops matrix average


【解决方案1】:

您正在重新定义每个循环上的变量:

   int ac1Row = rowX; int ac1Col = colX;

但你甚至不需要所有 8 个变量,你可以只保存一个角的坐标并计算其他的。

考虑一下

       int acRow, acCol;
        float largestArea = 0;
        for(int rowX = 0; rowX < dataRow - 1; rowX++){
            for(int colX = 0; colX < dataCol - 1; colX++){

                float area = (oceanData[rowX][colX] + oceanData[rowX][colX + 1] + oceanData[rowX + 1][colX] + oceanData[rowX + 1][colX + 1]) / 4;
                if(largestArea < area){
                    largestArea = area;
                    acRow = rowX; 
                    acCol = colX;                        
                }
            }
        }
 cout << endl << "The deepest 2x2 area is: " << largestArea << " m" << endl;
 cout << endl << "The coordinates are: (" << acRow << "," << acCol << ")" << " " << "(" << acRow  << "," << acCol + 1  << ")";
 cout << "(" << acRow + 1 << "," << acCol << ")" << "(" << acRow + 1 << "," << acCol + 1 << ")" << endl;

【讨论】:

  • 修复了它,我完全监督了我定义它们两次的事实。另外,感谢您的简化,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多