链接:https://ac.nowcoder.com/acm/contest/61132/F 来源:牛客网 题目描述 松鼠宝宝有一排n个大小不一的坚果,松鼠宝宝想把坚果从小到大排序,每次他会选择两个坚果a和b每次花费1点力气把这两个坚果交换,爱动脑筋的松鼠宝宝想知道他排完这n个坚果一共需要花费的最少力气是多少? 输入描述: 第一行一个整数n代表坚果数 接下来一行n个整数代表每个坚果的大小(每个坚果大小都不一样,即大小为1-n的一个排列) 1<=n<=1e5 坚果大小x,1<=x<=n 输出描述: 一行输出代表松鼠宝宝花费的最小力气 示例1 输入 复制 3 3 2 1 输出 复制 1用c++解答
时间: 2024-04-13 16:26:57 浏览: 90
你好!根据题目描述,松鼠宝宝想要将坚果从小到大排序,并且每次可以选择两个坚果进行交换,每次交换花费1点力气。你需要计算松鼠宝宝排完这n个坚果所需的最少力气。
以下是一种C++的解法:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n;
std::cin >> n;
std::vector<int> nuts(n);
for (int i = 0; i < n; i++) {
std::cin >> nuts[i];
}
std::sort(nuts.begin(), nuts.end());
int energy = 0;
for (int i = 0; i < n; i++) {
if (nuts[i] != i + 1) {
energy++;
}
}
std::cout << energy << std::endl;
return 0;
}
```
解决这个问题的思路是首先将坚果进行排序,然后遍历排序后的坚果数组,如果某个坚果的大小与它在数组中的位置不一致,说明需要进行交换操作,此时花费1点力气。最后输出所需的最小力气。
注意:在这个解法中,我们使用了标准库的`sort`函数来对坚果进行排序,因此需要包含`<algorithm>`头文件。同时,我们使用了`vector`来存储坚果大小,因此需要包含`<vector>`头文件。
希望能帮到你!如果还有其他问题,请随时提问。
阅读全文