题简单,每次遍历找最大的如果不在该在的位置就翻到最前面,再翻到该翻的位置。
注意:翻是一串都会翻 而不只是翻首尾
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
int a[1005];
void swp(int l, int r)
{
while (l < r)
{
int temp = a[l];
a[l] = a[r];
a[r] = temp;
l++;
r--;
}
}
int main()
{
int n;
while (cin >> n)
{
for (int i = 0; i < n; i++)
cin >> a[i];
int ans = 0;
int _n = n;
for(int i = 1;i < _n; i++)
{
int mark = 0;
for (int i = 1; i < n; i++)
{
if (a[i] > a[mark])
mark = i;
}
if (mark == 0)
{
ans += 1;
swp(0, n - 1);
}
else if (mark != n - 1)
{
ans += 2;
swp(0, mark);
swp(0, n - 1);
}
n--;
}
cout << ans << endl;
}
return 0;
}