这道题写着写着就会有想超时的感觉,但是写到后边了,所以就没管那么多,直接for循环了,在处理方面还不是很好,再多多练习练习
先放超时的代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
int main()
{
int n,num=0,a[maxn];
bool flag=true;
cin>>n;
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
while(flag)
{
int j;
if (a[0]==0)
{
for (j=0;j<n;j++)
{
if(a[j]!=j)
{
swap(a[0],a[j]);
num++;
break;
}
}
if(j==n)
{
printf("%d",num);
flag=false;
return 0;
}
}
else
{
for (int i=1;i<n;i++)
{
if (a[i]==0)
{
for (int k=0;k<n;k++)
{
if(i==a[k])
{
swap(a[k],a[i]);
num++;
break;
}
}
break;
}
}
}
}
}
修改后代码2
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
int main()
{
int n,num=0,a[maxn],temp;
bool flag=true;
cin>>n;
for (int i=0;i<n;i++)
{
scanf("%d",&temp);
a[temp]=i;
}
int j=1;
while(j<n)
{
if (a[0]==0)
{
for (;j<n;j++)
{
if(a[j]!=j)
{
swap(a[0],a[j]);
num++;
break;
}
}
}
else
{
swap(a[0],a[a[0]]);
num++;
}
}
printf("%d",num);
}