我正在尝试执行以下操作: 有一个矩阵,将整个内容打印出来,在每行的末尾打印该行的最大元素,并在每列的底部打印该列的最小元素。 我几乎是C ++的初学者。
所以这是我到目前为止所做的:
#include <iostream>
#include <iomanip>
#define M 50
#define N 50
using namespace std;
int main()
{
int m,n;
int a[M][N];
int b[M],c[N];
do {
cout<<"m=";
cin>>m;
cout<<endl<<"n=";
cin>>n;
cout<<endl;
}
while(m!=n);
for(int i=0;i<m; i++) {
for(int j=0; j<n; j++){
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
}
int max_row;
max_row=0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] > max_row) {
max_row = a[i][j];
b[i] = max_row;
}
}
}
for (int i=0; i<m; i++)
{ for(int j=0; j<n; j++){
cout<<setw(3)<<a[i][j]<<"\t";
}
cout<<"|"<<b[i];
cout<<endl;
}
for(int i=0; i<m; i++){
cout<<setw(3)<<"-";}
cout<<endl;
for(int j=0; j<n; j++)
{cout<<c[j]<<"\t";
}
system("pause");
}
在大多数情况下,max_row是正确的,例如这种情况:
3 2 1 |3
4 6 5 |6
7 8 9 |9
其他时候,他们会陷入困境,就像这样:
1 2 3 |3
4 33 6 |33
7 8 9 |-858993460
我真的不知道是什么原因造成的,并且由于没有错误消息,我感到非常困惑。另外我也不知道如何使min列最小。任何帮助将不胜感激。
答案 0 :(得分:0)
这些循环的问题
import re
def count_32(number):
if not isinstance(number, str):
number = str(number)
return len(re.findall('32', number))
是max_row的值应在外循环的每次迭代中初始化。否则,第一行之后的所有行都将处理前一行的最大值,并且通常不能使en元素大于max_row的当前值。因此,数组b的对应元素将不会初始化。
用户也可以输入矩阵负值,在这种情况下,您的程序将输出零而不是最大值。
要查找行中的最大元素和列中的最小元素,只要有一对嵌套循环/
这是一个演示程序/
max_row=0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] > max_row) {
max_row = a[i][j];
b[i] = max_row;
}
}
}
其输出为
#include <iostream>
#include <iomanip>
int main()
{
const size_t N = 3;
int a[N][N] =
{
{ 1, 2, 3 },
{ 4, 33, 6 },
{ 7, 8, 9 }
};
int b[N], c[N];
for ( size_t i = 0; i < N; i++ )
{
b[i] = a[i][0];
c[i] = a[0][i];
for ( size_t j = 1; j < N; j++ )
{
if ( b[i] < a[i][j] ) b[i] = a[i][j];
if ( a[j][i] < c[i] ) c[i] = a[j][i];
}
}
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
std::cout << std::setw( 3 ) << a[i][j] << '\t';
}
std::cout << '|' << b[i] << '\n';
}
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 3 ) << '-' << '\t';
}
std::cout << '\n';
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 3 ) << c[i] << '\t';
}
std::cout << '\n';
return 0;
}