这是我对3x3矩阵的次要实现。
问题是,由于一些奇怪的原因j
没有达到2,任何想法为什么会发生这种情况?
//return the minor of a 3x3 matrix
int matrix::minor(int element) const {
std::vector <int> list;
if (rows == columns) {
int result = 0, a = 0, b = 0;
for (int i = 1; i < rows; i++) {
for (int j = 0; j < columns && j != element; j++) {
std::cout << "Adding element " << array[i][j] << std::endl;
list.push_back(array[i][j]);
}
}
std::cout << std::endl;
a = list[0] * list[3];
b = list[1] * list[2];
result = a - b;
return result;
}
else {
std::cout << "Not a square matrix" << std::endl;
return 0;
}
}
我没有使用第一行,因为它是枢轴所在的位置,element
是第一行中的枢轴位置。
答案 0 :(得分:0)
当j
等于j
时,您的逻辑会打破循环,而不是忽略element
的迭代。
假设element
的值可以是0,1或2,那么您的逻辑需要是:
for (int i = 0; i < rows; i++) { // Note the change to the initial value of i
for (int j = 0; j < columns; j++) {
if ( j != element )
{
std::cout << "Adding element " << array[i][j] << std::endl;
list.push_back(array[i][j]);
}
}
}
在评论中,你说:
nope i的值必须为1,因为我跳过了第一行
那很公平。但是,我会将minor
更改为不假设1
。提供行索引和列索引来计算排名。
int matrix::minor(int irank, int jrank) const
{
std::vector <int> list;
if (rows == columns)
{
int result = 0, a = 0, b = 0;
for (int i = 0; i < rows; i++)
{
if ( i != irank )
{
for (int j = 0; j < columns; j++)
{
if ( j != jrank )
{
std::cout << "Adding element " << array[i][j] << std::endl;
list.push_back(array[i][j]);
}
}
}
}
std::cout << std::endl;
a = list[0] * list[3];
b = list[1] * list[2];
result = a - b;
return result;
}
else
{
std::cout << "Not a square matrix" << std::endl;
return 0;
}
}