矩阵中的正行

时间:2012-07-15 17:27:14

标签: c++ matrix rows

我必须为大学做一个练习,要求我检查(k次)矩阵是否有正行(我的意思是一行包含所有正元素),我认为for循环的索引有问题但是我找不到错误。

我尝试使用cout语句调试应用于计数器它给了我“101”,所以看起来编译器将“1”分配给正行,将“0”分配给负数

这是我写的代码:

#include <iostream>

using namespace std;

const int N = 3;

bool positive(int a[N][N], int row[N], int x) {
    bool condition = false;

    for(int i = 0; i < N; i++) {
        row[i] = a[x][i];
    }

    int j = 0;

    while(j < N) {
        if(row[j] >= 0) {
            condition = true;
        } else {
            condition = false;
        }

        j++;

    }

    return condition;
}


bool function (int a[N][N], int z, int j, int k) {
    int b[N];
    int c[N];
    int count = 0;

    if(positive(a, b, z) && positive(a, c, j)) {
        count++;
    }

    if(count == k) {
        return true;
    } else {
        return false;
    }
}


int main() {
    int a[N][N] = {
        {
            2, 8, 6
        }, {
            -1, - 3, - 5
        }, {
            6, 10, 9
        }
    };

    int k = 2;

    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) {
            if(function (a, i, j, k)) {
                cout << "OK";
            } else {
                cout << "NO";
            }

        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您应该再看看这个问题,然后使用其他解决方案重新启动。目标很简单,但是你的代码非常复杂,而且其中一些代码并没有多大意义。

例如,如果您有这样的矩阵:

    1   2   4    --> matrix A
   -1   8  -6
    3   9   2

你有N = 3行和列。根据你所说的,你唯一要做的就是取矩阵,循环遍历N行,对于每一行,检查它的N列以查看是否有&lt; 0

这样做K次,就像你说的那样,毫无意义。每次比较时矩阵都是一样的,因为你没有改变它,为什么你会多次这样做呢?我想你应该重读那里的任务简报。

至于找到哪些行是正面还是负面的逻辑,只需做一些像这样简单的事情。

//Create array so we have one marker for each row to hold results.
bool rowPositiveFlags[N] = { true, true, true };

//Cycle through each row.
for (int row = 0; row < N; ++row)
    //Cycle through every column in the current row.
    for (int col = 0; col < N; ++col)
        //If the column is negative, set the result for this row to false and break
        //the column for loop as we don't need to check any more columns for this row.
        if (A[row][col] < 0) {
            rowPositiveFlags[row] = false;
            break;
        }

您应该始终为事物命名,以便您可以像书本一样阅读您的代码。你的i,j和k只是让一些简单的混乱。至于问题,请计划您的解决方案。

在纸上手工解决问题,在代码中的注释中写下步骤,然后在注释下面编写代码,这样你做的事情肯定有意义并且不会过度。


这是一个很棒的网站,但下次发布一小段显示问题的代码。人们不应该在这里给你一个完整的家庭作业解决方案,所以不要寻找一个。只需找到指数被破坏的位置并粘贴5行或其他任何错误。人们很欣赏这一点,你会得到更快,更好的答案来展示努力:)