通过题目描述,我们可以直接模拟题目过程,首先从开头开始遍历,如果遇到错位的瓶子,就从当前瓶子向后再次遍历,直到遇到需要交换的瓶子就直接进行交换,同时统计次数,这样遍历到最后就能直接得出答案
上代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main(void)
{
int ans = 0;
int n; cin >> n;
int *bottle = new int[n + 10];
for(int i = 1; i <= n; i++) cin >> bottle[i];
for(int i = 1; i <= n; i++){
if(bottle[i] != i){//如果当前的瓶子编号不对
for(int j = i + 1; j <= n; j++){//进行遍历,寻找到符合当前位置的瓶子
if(bottle[j] == i){
ans++;
swap(bottle[i], bottle[j]);
break;
}
}
}
}
cout << ans << endl;
return 0;
}