题目描述
题目描述不再过多赘述,这道题是一道类似于模拟的题,实际思路就是遍历数位,发现和他应有顺序不同的,就从他后面(i+1->n)寻找相同的,然后将二者交换,之后再往后遍历到n即可
这里给大家提供一组交换例子:
目标:1 2 3 4 5 6 7 8 9 10
实际:9 10 5 1 6 4 7 3 2 8
1 10 5 9 6 4 7 3 2 8
1 2 5 9 6 4 7 3 10 8
1 2 3 9 6 4 7 5 10 8
1 2 3 4 6 9 7 5 10 8
1 2 3 4 5 9 7 6 10 8
1 2 3 4 5 6 7 9 10 8
1 2 3 4 5 6 7 8 10 9
1 2 3 4 5 6 7 8 9 10
样例
输入样例1:
5
3 1 2 5 4
输出样例1:
3
算法1
(暴力枚举) $O(n^2)$
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int a[N],n,t;
int ans=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
if(a[i]!=i)
{
for(int j=i+1;j<=n;j++)
{
if(a[j]==i)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
ans++;
}
}
cout<<ans<<endl;
return 0;
}
选择排序....
哈哈哈,确实暴力能过
够暴力
不知道咋过的
默认s[s[i]]=s[i],while可以换做if