代码:
#include<iostream>
using namespace std;
int l;
void Daoxu(int a[],int low,int high)
{
int t=0;
for(int i=low, j=high;i<j;j--,i++)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int M(int a[],int n)
{
int m=0;
for(int i=1;i<=n;i++)
{
if(m<a[i])
{
m=a[i];
l=i;
}
}
return m;
}
int main()
{
int a[1001],n,c=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int j=n;j>1;j--)
{
int maxl=M(a,j);
if(l==1)
{
Daoxu(a,1,n);
c=c+1;
}
if(l>1&&l<j)
{
Daoxu(a,1,l);
Daoxu(a,1,n);
c=c+2;
}
}
cout<<c<<endl;
return 0;
}
思路:
一个倒序函数,一个找最大值函数.
在主函数中,用最大值的位置来判定翻转几次.
易错:
在for中用了i后,在同一个函数中不能再用i,会C E.
在判断两次翻转时要注意最大值在最后一位不用翻转.