【发布时间】:2021-11-03 11:23:40
【问题描述】:
我是编码新手,我看不出这个逻辑有什么问题。 我无法获得该程序所需的输出。 问题是找到数组的最小和最大元素。
这个想法是分别为最小值和最大值创建两个函数,并进行线性搜索以识别最大值和最小值。
#include <iostream>
#include<climits>
using namespace std;
void maxElement(int a[], int b)
{
// int temp;
int maxNum = INT_MIN;
for (int i = 0; i < b; i++)
{
if (a[i] > a[i + 1])
{
maxNum = max(maxNum, a[i]);
}
else
{
maxNum = max(maxNum, a[i+1]);
}
// maxNum = max(maxNum, temp);
}
// return maxNum;
cout<<maxNum<<endl;
}
void minElement(int c[], int d)
{
// int temp;
int minNum = INT_MAX;
for (int i = 0; i < d; i++)
{
if (c[i] > c[i + 1])
{
minNum = min(minNum,c[i+1]);
}
else
{
minNum = min(minNum,c[i]);
}
// minNum = min(minNum, temp);
}
// return minNum;
cout<<minNum<<endl;
}
int main()
{
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
minElement(arr,n);
maxElement(arr,n);
return 0;
}
【问题讨论】:
-
您为什么在一次迭代中考虑
a[i]和a[i+1]?i+1不是上次迭代中的有效索引 -
int arr[n];也不是标准的 C++。 Why aren't variable-length arrays part of the C++ standard? -
您只比较相邻的数字,然后再决定一个数字是新的最小值还是最大值。您需要将新数字与现有的最小值或最大值进行比较,而不是与其相邻的数字进行比较。