我必须为大学做一个练习,要求我检查(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;
}
答案 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行或其他任何错误。人们很欣赏这一点,你会得到更快,更好的答案来展示努力:)