C++ 如何求二维数组行中的最大和
我已经找到了一些与这个问题相关的答案,但我真的不知道它们是如何工作的。我需要找到一个二维的每一行的最大和并打印出来,但不要打印出任何其他的和。以下是我到目前为止的情况:C++ 如何求二维数组行中的最大和,c++,multidimensional-array,sum,C++,Multidimensional Array,Sum,我已经找到了一些与这个问题相关的答案,但我真的不知道它们是如何工作的。我需要找到一个二维的每一行的最大和并打印出来,但不要打印出任何其他的和。以下是我到目前为止的情况: #include <iostream> using namespace std; int main (int argc, char ** argv) { int v[3][5]; // 3 rows, then 5 columns for (int i=0; i<3; i++){
#include <iostream>
using namespace std;
int main (int argc, char ** argv)
{
int v[3][5]; // 3 rows, then 5 columns
for (int i=0; i<3; i++){
for (int j=0; j<5; j++){
cin >> v[i][j];
}
}
//test reading value
for (int i=0; i<3; i++){
for (int j=0; j<5; j++){
cout << v[i][j];
if (i!=4)
cout << ' ';
}
cout << '\n';
}
//solve it
for (int i=0; i<3; i++){
int sum = 0;
for (int j=0; j<5; j++){
sum += v[i][j];
}
cout << sum << '\n';
}
return 0;
}
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
int v[3][5];//3行,然后是5列
对于(int i=0;i v[i][j];
}
}
//测试读数
对于(inti=0;i,您可以通过跟踪为数组的每一行计算的最大和来实现这一点
//solve it
int largestSum = 0;
for (int i = 0; i<3; i++)
{
int sum = 0;
for (int j = 0; j<5; j++)
{
sum += v[i][j];
}
// check to see if we have computed a new larger sum and save it if we have.
if (sum > largestSum)
{
largestSum = sum;
}
}
cout << "largest sum: " << largestSum << '\n';
int biggestSum=0;
对于(int i=0;i,这里是我能想到的最短解决方案,也可以正确处理负和(C++11):
int maxSum=std::numeric_limits::min();
用于(常量自动和行:v)
maxSum=std::max(maxSum,std::accumulate(std::begin(行),std::end(行),0));
std::好吧,有什么问题吗?我需要得到每行的最大值。你自己尝试过吗?@OMGtechy是的,我尝试过。这就是我到目前为止所得到的。这就像我问题的第一步。我还有一个问题要问。@OMGtechy自从我得到了这个问题的答案后,我如何摆脱问题禁令。或者甚至使用std::max
@OMGtechy是的,std::max
将是groovy,但是像这样的问题通常与家庭作业有关,并且标准库的使用是有限的。足够公平:)可能值得添加一个“如果你能使用标准库” section@OMGtechy使用std::accumulate
和std::max
@CaptainObvlious更新示例您知道为什么这个问题会导致我被禁止发布新问题吗?我被禁止发布新问题。您如何解决这个问题?
#include <algorithm>
#include <numeric>
//solve it
int largestSum = 0;
for (int i = 0; i<3; i++)
{
int sum = std::accumulate(std::begin(v[i]), std::end(v[i]), 0);
largestSum = std::max(sum, largestSum);
}
cout << "largest sum: " << largestSum << '\n';
int biggestSum = 0;
for (int i=0; i<3; i++) {
int currentSum = 0; // sum of values in this row
for (int j=0; j<5; j++){
currentSum += v[i][j];
}
if ( currentSum > biggestSum) biggestSum = currentSum; // we have new max
}
cout << biggestSum << '\n';
int maxSum = std::numeric_limits<int>::min();
for (const auto& row : v)
maxSum = std::max(maxSum, std::accumulate(std::begin(row), std::end(row), 0));
std::cout << maxSum << std::endl;