此代码查找动态数组的最大元素
int i, n, *x, max;
cout << "eneter a number: ";
cin >> n;
x = new int[n];
max = x[0];
for (i = 0; i < n; i++)
{
if (x[i] > max)
{
max = x[i];
}
}
cout << max << endl;
delete []x;
让我们假设我的输入是:
n=4
{3, 22, 15, 17}
因此输出为22
我不明白如何选择22
为max
。
这是我对其工作原理的理解:
n=4
{3, 22, 15, 17}
x[0] = 3
first loop i=0 -> x[0]>x[0] false
x[1] = 22
second loop i=1 -> x[1]>x[0] true
x[2] = 15
third loop i=2 -> x[2]>x[0] true
x[3] = 17
forth loop i=3 -> x[3]>x[0] true
我知道我错了但作为我的假设,17必须是最大值。 我在这里缺少什么?
这是我的全部代码:
#include <iostream>
using namespace std;
int main(){
int i, n, *x, sum=0, location, max;
cout << "eneter a number: ";
cin >> n;
x = new int[n];
for(i=0; i<n; i++){
cin >> x[i];
}
cout << endl<< x[0];
max = x[0];
for (i = 0; i < n; i++)
{
if (x[i] > max)
{
max = x[i];
location = i+1;
}
}
cout << endl<< max;
delete []x;
}
答案 0 :(得分:3)
在此步骤中
x[1] = 22
second loop i=1 -> x[1]>x[0] true
由于if语句的条件值为true
,因此执行if语句的子语句
if (x[i] > max)
{
max = x[i];
}
和max设置为22。
max = x[i];
在以下步骤中,将x [i]与新的最大值进行比较。而不是
x[2] = 15
third loop i=2 -> x[2]>x[0] true
x[3] = 17
forth loop i=3 -> x[3]>x[0] true
正确编写
x[2] = 15
third loop i=2 -> x[2]>max false
x[3] = 17
forth loop i=3 -> x[3]>max false
考虑到标题std::max_element
中声明的标准算法<algorithm>
实际上是相同的。你可以用以下方式调用它
#include <algorithm>
//...
int *max = std::max_element( x, x + n );
std::cout << "max = " << *max << std::endl;