題目鏈接地址:http://ac.jobdu.com/problem.php?pid=1146
轉載請注明本文地址http://blog.csdn.net/yangnanhai93/article/details/42014265
因為問題只要求2n-3次,並沒有別的要求,所以最簡單一個思想就是沒一次循環完成一個目標就是把當前最大的放到最後,那麼第一步就是先經過旋轉把當前最大的放在數組最前面,第二步就是旋轉到對應位置
#includeusing namespace std; void change(int num,int *A,int m) { int left=1,tmp; while(left =1;i--)//找最大的; { if(A[i]==i)//如果已經在最後了,那麼就不需要旋轉; continue; if(A[1]!=i)//如果目前最大的不在最前,則需要旋轉一次,把最大的放到第一個; { for(int j=2;j<=num;j++) { if(A[j]==i) { change(num,A,j); //display(A,num); B[index++]=j; } } } change(num,A,i); //display(A,num); B[index++]=i; } printf("%d",index); for (int i=0;i