C++在数组中查找max(按行)和min(按列)元素
C++ Find max(by row) and min(by column) element in array
我需要按行找到二维(4,4)数组中的最小元素,按列找到最大元素,并将它们存储在另一个数组(5,5)中。也许我没有正确解释。
这就是新阵列(5,5)的外观:
1 2 3 4 min
1 2 3 4 min
1 2 3 4 min
m m m m 0
*m-最大
这是第一个数组:
int array[4][4];
int i, j;
for(i = 0; i < 4; i++) {
for(j = 0; j < 4; j++) {
cout << "n array[" << i + 1 << "][" << j + 1 <<"]=";
cin >> array[i][j];
}
}
有了这个,我试图找到每行的最小值:
int min;
for (i = 0; i<4; i++) {
min[i] = array[0][i];/*expression must have pointer-to-object type*/
for (j = 1; j<4; j++) {
if (min[i]>array[i][j])/*expression must have pointer-to-object type*/
min[i] = array[i][j];/*expression must have pointer-to-object type*/
}
}
我哪里错了?我无法撤消此错误"表达式必须具有指向对象类型的指针"。
有了这个,我将尝试制作新的阵列:
for(i = 0; i < 4; i++) {
for(j = 0; j < 4; j++) {
newarr[i][j]=array[i][j];
newarr[i][5]=max[i];
}
}
for(j = 0; j < 4; j++)
newarr[5][j]=min[j];
这样可以吗?没有办法检查它,因为我找不到最小和最大
int min;
min[i]
是错误的来源。min是一个整数变量,而不是整数数组。
将int min更改为int min[4];
您有int min;
。此变量只能包含一个值,并且由于min
不是数组,因此以下是格式错误的min[i]
。
只要将其作为阵列就可以解决问题:int min[4];
还要注意,2D阵列的第一个索引传统上表示行,第二个索引表示列。检查循环中的索引使用情况:为什么在不同的地方使用i作为机器人的第一个和第二个索引?
这里展示了一种简单的方法。您可以将其用作程序的基础
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
int main()
{
const int MAX_VALUE = 100;
const size_t N = 4;
int a[N][N];
int b[N+1][N+1];
std::srand( ( unsigned int )std::time( nullptr ) );
for ( auto &row : a )
{
for ( int &x : row ) x = std::rand() % MAX_VALUE;
}
for ( const auto &row : a )
{
for ( int x : row ) std::cout << std::setw( 2 ) << x << ' ';
std::cout << std::endl;
}
std::cout << std::endl;
for ( size_t i = 0; i < N; i++ ) b[N][i] = a[0][i];
b[N][N] = 0;
for ( size_t i = 0; i < N; i++ )
{
int min = a[i][0];
for ( size_t j = 0; j < N; j++ )
{
b[i][j] = a[i][j];
if ( a[i][j] < min ) min = a[i][j];
if ( b[N][j] < b[i][j] ) b[N][j] = b[i][j];
}
b[i][N] = min;
}
for ( const auto &row : b )
{
for ( int x : row ) std::cout << std::setw( 2 ) << x << ' ';
std::cout << std::endl;
}
std::cout << std::endl;
}
程序输出可能看起来像
77 53 41 90
67 57 90 94
20 41 29 38
3 72 33 43
77 53 41 90 41
67 57 90 94 57
20 41 29 38 20
3 72 33 43 3
77 72 90 94 0
这个想法是用原始数组第一行的值填充新数组的最后一行,然后将最后一行的每个值与当前列中当前行的值进行比较。
这就是整个代码:
#include <iostream>
using namespace std;
int main() {
int A[4][4];
int i, j;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) {
cout << "n A[" << i + 1 << "][" << j + 1 << "]=";
cin >> A[i][j];
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
cout << A[i][j] << "t";
cout << "n";
}
{
int min[4];
for (i = 0; i < 4; i++) {
min[i] = A[0][i];
for (j = 1; j < 4; j++) {
if (min[i] > A[i][j])
min[i] = A[i][j];
}
}
int newarr[5][5];
int max[5] = { 1,2,3,4,5 };
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
newarr[i][j] = A[i][j];
newarr[i][5] = max[i];
}
}
for (j = 0; j < 4; j++)
newarr[5][j] = min[j];
cout << newarr[5][j] << "t";
cout << "n";
}
}
我把随机元素设置为最大值,因为到目前为止我只测试。但一旦我开始我的程序,它只显示正确的第一个数组。新数组应该在哪里,它显示为零。这是调试的结果:
5 4 3 1
5 6 7 9
4 2 3 9
4 8 4 6
0
相关文章:
- 按列随机播放 2D 矢量
- 按列打印二维数组时出现问题
- 特征:按列或行顺序将稀疏矩阵传递给同一函数
- 如何查找给定矩阵的最大排序子矩阵(按行和按列排序)
- 按列对CSV文件进行排序,并与C 中的另一列进行比较
- 按列对QTableWidget进行排序
- 按列主要顺序迭代行大量存储数组
- 按列进行排序后,如何从qtablewidget :: item(qt bug?)中获取正确的行
- 增加单词之间的空格,按列排列单词
- 按列复制 C/C++ 数组
- 特征值中最大系数的索引(按列)
- Cplex C++按列添加变量(库存)
- 在C/C++中按列附加数据
- C++在数组中查找max(按行)和min(按列)元素
- 如何在C++中按列对多维数组进行排序
- 如何在c++中按列主顺序存储二维数组中的值
- c++按列排序二维向量
- 在c++中按列向文本文件写入数据
- c++方法,按列中的元素对矩阵排序(与MATLAB中的排序行相同)
- 将十六进制值的行垂直按列转换为二进制