OJ题目:click here~~
题目分析:1……n按顺序围成一个圈,1与n相邻。交换相邻两个数算1步。至少需要多少步,得到一个逆方向的1……n的圈。
分两半,使用冒泡排序,排成逆序的交换次数之和即为结果。
AC_CODE
int f(int n){
return n*(n - 1)/2;
}
int main(){
int n , t;
cin >> t;
while(t--){
cin >> n;
int ans = 0;
if(n&1) ans = f(n/2) + f(n/2 + 1);
else ans = 2*f(n/2);
cout << ans << endl;
}
}