C++ 查找2D数组C+中每一行的最大值+;
我已经用这个方法找到了2D数组中每一行的最小值C++ 查找2D数组C+中每一行的最大值+;,c++,multidimensional-array,max,C++,Multidimensional Array,Max,我已经用这个方法找到了2D数组中每一行的最小值 void findLowest(int A[][Cm], int n, int m) { int min = A[0][0]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (A[i][j] < min) {
void findLowest(int A[][Cm], int n, int m)
{
int min = A[0][0];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (A[i][j] < min)
{
min = A[i][j];
}
}
out << i << " row's lowest value " << min << endl;
}
}
void findLowest(int A[][Cm],int n,int m)
{
int min=A[0][0];
对于(int i=0;i out这两个函数都返回整个数组而不是每行的结果(最大值或最小值),因为您设置了max
一次而不是每行一次。您可以按如下方式获得每行的结果:
void findHighest(int A[][Cm], int n, int m)
{
for (int i = 0; i < n; i++)
{
int max = A[i][0];
for (int j = 1; j < m; j++)
{
if (A[i][j] > max)
{
max = A[i][j];
}
}
// do something with max
}
}
这将为您提供易于检查的所有值:
#include <algorithm>
#include <iostream>
enum { Cm = 2 };
void findHighest(int A[][Cm], int n, int m) {
if (m <= 0) return;
for (int i = 0; i < n; i++) {
int max = *std::max_element(A[i], A[i] + m);
std::cout << max << " ";
}
}
int main() {
int A[2][2] = {{1, 2}, {3, 4}};
findHighest(A, 2, 2);
}
#包括
#包括
枚举{Cm=2};
无效findHighest(整数A[][Cm],整数n,整数m){
如果(m如果您的编译器支持C++11,那么对于具体数组,您可以使用以下替代方法,这是基于:
模板
无效的
最小最大值行(T常量(&arr)[N][M],T常量(&mincol)[N],T常量(&maxcol)[N]){
for(int i(0);i
您的测试数据因未清楚显示缺陷而有罪
行极小值以递减的形式出现,因此它们在每一行上都会得到更新
行最大值也出现在递减的值中,因此第一个值将继续获胜
正如其他人所指出的,您的函数会查找全局最小值/最大值,而不是每行极值
将min/max变量的初始化移到外部循环中。如前所述,您的代码仅显示整个数组中的最大元素。
这是帮助您的代码
void findHighest(int A[][Cm], int n, int m)
{
int max[n];
max[0]=A[0][0];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (A[i][j] > max[i])
{
max[i] = A[i][j];
}
}
cout << i << " row's highest value " << max[i] << endl;
}
}
void findHighest(int A[][Cm],int n,int m)
{
int max[n];
max[0]=A[0][0];
对于(int i=0;imax[i])
{
max[i]=A[i][j];
}
}
cout{
inti,j;
int-arr[4][2]={(1,2)、(3,4)、(5,6)、(7,8)};
int max;
max=arr[0][0];
对于(int i=0;i)您的第一个示例只找到整个数组中的最小元素。如果您有一个最小值的解决方案,为什么不取一个*-1并通过您的函数运行它呢?如果几个简单的替换不能将其转换为最大值,则很可能您的最小值是错误的。这些代码不会“显示”任何内容。这两个函数都是无效的“展示"我的意思是当我把out-Ummm放出来时,它会显示所有的最小值。如果我使用标准算法max\u元素添加out几乎+1,这就是我在结果文件中得到的结果,但是你没有处理m为0的路径情况。当你分配给max
@feco时,这将导致UB。这不是你正在尝试的吗要获得最小值(或最大值)每行?@RichardHodges都添加了一个检查,谢谢。无论如何,这只是一个例子。这正是我想要得到的,但困扰我的是第一个函数显示了所有最小值,第二个函数只显示了第一个最大值,而这两个函数都使用相同的方法查找值。我已经检查过了。谢谢你的提示G,这似乎是问题。你在评论中说:行最小值是46, 41, 36,31, 26,减少。我不知道行最大值。也许你可以考虑一个赞成票。@ YVISDAUSTST + 1指出了“差异”的原因。这很好,但是OP并没有问如何同时找到Min和Max。@ VITAUT不是ANSW。呃,这是一个替代方案。未来的读者可能会从中受益。如果我回答了一个已经回答过的问题,那就不对了;)@101010你的直播演示在第15行有一个小错误;一个额外的方括号;)你能简单描述一下吗?
#include <algorithm>
#include <iostream>
enum { Cm = 2 };
void findHighest(int A[][Cm], int n, int m) {
if (m <= 0) return;
for (int i = 0; i < n; i++) {
int max = *std::max_element(A[i], A[i] + m);
std::cout << max << " ";
}
}
int main() {
int A[2][2] = {{1, 2}, {3, 4}};
findHighest(A, 2, 2);
}
template<typename T, std::size_t N, std::size_t M>
void
minmax_row(T const (&arr)[N][M], T (&mincol)[N], T (&maxcol)[N]) {
for(int i(0); i < N; ++i) {
auto mnmx = std::minmax_element(std::begin(arr[i]), std::end(arr[i]));
if(mnmx.first != std::end(arr[i])) mincol[i] = *(mnmx.first);
if(mnmx.second != std::end(arr[i])) maxcol[i] = *(mnmx.second);
}
}
void findHighest(int A[][Cm], int n, int m)
{
int max[n];
max[0]=A[0][0];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (A[i][j] > max[i])
{
max[i] = A[i][j];
}
}
cout << i << " row's highest value " << max[i] << endl;
}
}
int i,j;
int arr[4][2]={(1,2),(3,4),(5,6),(7,8)};
int max;
max=arr[0][0];
for( int i=0; i<4; i++)
{
for(int j=0; j<2; j++)
{
if(max<arr[i][j])
{
max=arr[i][j];
}
}
}
int min;
min=arr[0][0];
for(int i=0; i<4; i++)
{
for(int j=0; j<2; j++)
{
if(min>arr[i][j])
{
min=arr[i][j];
}
}
}
cout<<"maximum number is:"<<max;
cout<<endl;
cout<<"Minimum Number is:"<<min;