首页 > 解决方案 > 如何交换数组中的最后一个元素和最大元素?

问题描述

如何交换数组的最大和最后一个元素?

我想编写一个程序,它请求自然数NN(不超过100),从各种数的NN进一步序列,改变最后一个元素和最大值的位置,保持其他元素不变,并推导接收到的数组。

样本输入 1:

8
3 6 12 1 7 19 25 4

样本输出 1:

3 6 12 1 7 19 4 25

这是我尝试过的:

#include <iostream>
using namespace std;
int main() 
{
    int i,arr[100],n;
    cin>>n;
    int imin=0;
    for (int i=0; i<n; i++){cin>>arr[i];}

    int max=0;
    for (i=1;i<n;i++) 
    {
        if (arr[i]>arr[max])
            max=i;
        int tmp=arr[max];
        arr[max]=arr[n-1];
        arr[n-1]=tmp;
        for (i=0;i<n;i++)
            cout <<arr[i]<< " ";
        cout << "\n";  
    }  
    return 0;
}

它不会改变最大和最后的位置。我怎样才能做到这一点?

标签: c++

解决方案


#include <algorithm> // max_element, iter_swap

// ...

    auto me = std::max_element(arr, arr + n); // get an iterator to the largest element
    std::iter_swap(me, arr + n - 1); // swap the value at "me" with the last element


推荐阅读