问题:让A是n个元素的数组(即A的元素是A,.,−1)。如果以下条件适用于Ai,则元素Ai是极端的
编写一个算法,打印给定数组的端点。如果没有极值点,算法会打印“排序”。您是否同意数组没有极值点的当且仅当它是排序的?解释你的答案。
我所做的是:
#include <iostream>
using namespace std;
bool extremePoint(int arr[], int n, int num, int leftNeighbour, int rightNeighbour);
int main()
{
int array[] = { 0, 5, 3, 6, 8, 7, 15, 9 };
int size = sizeof(array) / sizeof(array[0]);
for (int i = 1; i < size - 1; i++) {
// If the current element is a peak
if (extremePoint(array, size, array[i], array[i - 1], array[i + 1]))
{
cout << array[i] << " ";
}
}
return 0;
}
bool extremePoint(int arr[], int size, int num, int leftNeighbour, int rightNeighbour)
{
if (num > leftNeighbour && num > rightNeighbour)
{
return true;
}
if (num < leftNeighbour && num < rightNeighbour)
{
return true;
}
else
{
return false;
}
}
问题是:
我成功地编写了打印给定数组的端点的算法。
有谁能帮我做这件事吗
如果没有极值点,算法会打印“排序”。您是否同意数组没有极值点的当且仅当它是排序的?解释你的答案。
发布于 2021-05-30 12:38:45
首先,这个函数
bool extremePoint(int arr[], int size, int num, int leftNeighbour, int rightNeighbour)
{
if (num > leftNeighbour && num > rightNeighbour)
{
return true;
}
if (num < leftNeighbour && num < rightNeighbour)
{
return true;
}
else
{
return false;
}
}
不使用其参数arr
和size
。
这个函数可以写成
bool extremePoint( int num, int eftNeighbour, int rightNeighbour )
{
return leftNeighbour < num && rightNeighbour < num ||
num < leftNeighbour && num < rightNeighbour;
}
如果序列不包含极值点,这并不意味着序列被排序。
例如,考虑序列
1, 2, 2, 1
另一方面,很明显,排序序列实际上没有一个极端点。
注意这句话
编写了一种算法,用于打印给定数组的端点。
可以解释为需要编写单独的函数(算法)。
我将用如下方式编写这样的算法,如下面的演示程序所示
#include <iostream>
#include <iterator>
template <typename InputIterator, typename OutputIterator>
OutputIterator extreme_points( InputIterator first,
InputIterator last,
OutputIterator out )
{
if ( first != last )
{
for ( auto prev_value = *first++; first != last; )
{
auto current_value = *first;
if ( ++first != last )
{
if ( prev_value < current_value && *first < current_value ||
current_value < prev_value && current_value < *first )
{
*out++ = current_value;
}
prev_value = current_value;
}
}
}
return out;
}
int main()
{
int a[] = { 0, 5, 3, 6, 8, 7, 15, 9 };
extreme_points( std::begin( a ),
std::end( a ),
std::ostream_iterator<int>( std::cout, ", " ) );
std::cout << '\n';
return 0;
}
程序输出是
5, 3, 8, 7, 15,
https://stackoverflow.com/questions/67760895
复制相似问题