呃,數(shù)學(xué)竟然成了我的弱項(xiàng),還是我小學(xué)奧數(shù)沒學(xué)明白呢……

很簡單的題目,題意我就不說了

為了完成反向交換,最少的辦法就是從一點(diǎn)把所有人分成兩組

然后每個(gè)組進(jìn)行反向交換,最后加起來就是

如果某一點(diǎn)需要交換到距離自己的距離超過n/2時(shí),那就可以放到另外一組,得到的交換步驟肯定比較少

不知道說清楚了沒有……

代碼在別人那里看到的,最開始自己做的遞推公式錯(cuò)了……

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int d(int n)//懂得原理,就是一個(gè)算數(shù)
 5 {
 6  int i,t=0;
 7  for(i=1;i<n;i++)
 8     t+=i;
 9  return t;
10 }
11 
12 int main()
13 {
14  int n,i,a,p;
15  while(cin>>n)
16  {
17   for(i=0;i<n;i++)
18   {
19    cin>>a;
20    p=d(a/2)+d(a-a/2);//算式
21    cout<<p<<endl;
22   }
23  }
24  return 0;
25 }