如何仅在多维向量中添加特定元素并将内容打印到屏幕

时间:2017-07-13 06:09:17

标签: c++ matrix

我正在开发 matrixElementsSum 关于codefights的任务,更多代码对我来说似乎没问题,但我在visual studio中遇到了下标错误,而且codefights编译器遇到了问题。我不知道我错在哪里。我可以得到一些帮助

以下是问题:

成名后,CodeBots决定搬到一幢新大楼并一起生活。该建筑由一个矩形的房间矩阵表示,每个单元格包含一个整数 - 房间的价格。有些房间是免费的(费用是0),但可能是因为它们闹鬼,所以所有的机器人都害怕它们。这就是为什么任何免费或位于同一列中空闲房间下方的房间都不适合机器人。

帮助机器人计算出适合他们的所有房间的总价。

实施例

有关

matrix = [[0, 1, 1, 2], 
         [0, 5, 0, 0], 
         [2, 0, 3, 3]]

输出应该是 matrixElementsSum(matrix)= 9。

这里的房间矩阵有不合适的房间标有' x':

[[x, 1, 1, 2], 
 [x, 5, x, x], 
 [x, x, x, x]]

因此,答案是1 + 5 + 1 + 2 = 9。

我的解决方案是创建一个新矩阵并输出新创建的矩阵(向量),只包含我想要的元素,然后对所有元素求和并返回总数。

int matrixElementsSum(std::vector<std::vector<int> > matrix) {
    std::vector<std::vector<int> > notHaunted;
    std::vector<int> room;

    for (unsigned int i = 0; i < matrix.size(); i++) {
        for (unsigned int  j = 0; j < matrix[i].size(); j++) {
            //cout << matrix[i][j];

            if (matrix[i][j] == 0) {
                cout << " oooo its a haunted room... Lets see if there are more "
                     << endl;
            }
            else {
                room.push_back(j);
                notHaunted.push_back(room);
            }

            cout << notHaunted[i][j];
        }

        cout << endl;
    }

    int total = 0;

    for (unsigned int i = 0; i < notHaunted.size(); i++) {
        for (unsigned int  j = 0; j < notHaunted[i].size(); j++)
            total += notHaunted[i][j];
    }

    return total;
}

1 个答案:

答案 0 :(得分:0)

   ....
    else
  {

    room.push_back(j);
    notHaunted.push_back(room);
  }

  cout << notHaunted[i][j]; //accessing out of bounds
}

考虑i=0j=0,您的代码位于if部分,因此在打印notHaunted[i][j]时,notHaunted实际上是空的。所以您正在访问边界 此外,你不处理你提到的房间下面的鬼屋也闹鬼的部分。

一种简单的方法是首先将所有闹鬼的房间标记为0。然后将整个阵列求和。