呃,數學竟然成了我的弱項,還是我小學奧數沒學明白呢……
很簡單的題目,題意我就不說了
為了完成反向交換,最少的辦法就是從一點把所有人分成兩組
然后每個組進行反向交換,最后加起來就是
如果某一點需要交換到距離自己的距離超過n/2時,那就可以放到另外一組,得到的交換步驟肯定比較少
不知道說清楚了沒有……
代碼在別人那里看到的,最開始自己做的遞推公式錯了……
1 #include<iostream>
2 using namespace std;
3
4 int d(int n)//懂得原理,就是一個算數
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 }