

注解
1、本题相当于求逆序,一个容量为n的队列,逆序需要交换的次数为 n * (n-1) / 2。
2、本题是个圆形队列(循环队列),相当于没有首尾,因此将队列分成两半,分的时候容量尽量接近,每部分分别逆序再整合即可。
代码
#include <iostream>
using namespace std;
int fun(int n){
return n*(n-1)/2;
}
int main() {
int n;
while(~scanf("%d", &n)){
int a = n/2;
int b = n-a;
printf("%d\n", fun(a)+fun(b));
}
return 0;
}
结果

本文介绍了一种解决循环队列逆序问题的算法,通过将队列分为两半并分别逆序,最后整合两部分来实现整个队列的逆序。文章提供了详细的算法思路和C++代码实现。
2118

被折叠的 条评论
为什么被折叠?



