題目鏈接在此。
雖然這個題目在題干中有非常多的限制,“不允許有額外數組”、“移動次數最少”等等,但是PAT是一個黑盒測試,只需要結果正確,能過通過所有測試點即可。所以不需要被這些限制所限制,這里只寫出兩種方法, 一種是我自己的想法,用了“簡單模擬”的思想,即題目說“數組右移”,那么我就數組右移,故這種方法的關鍵就在如何右移數組;另外一種方法是《算法筆記》中的,這種方法更加直接,直接按照一定的規律輸出,甚是巧妙。
下面是我的代碼:
#include<stdio.h>int main(){ int N,M; int a[105]; scanf("%d %d",&N, &M); M = M % N; //題目并沒有保證M<N for( int i = 0 ; i < N; i++){ scanf("%d",a+i); } if(M == 0){ for(int i = 0 ; i < N; i++){ if( i == N-1){ 下面是《算法筆記》的代碼:#include<stdio.h>int main(){ int N,M; int a[105]; scanf("%d %d",&N,&M); M = M % N; for(int i = 0 ; i < N; i++){ scanf("%d",a+i); } int count = 0; //用來計數,為"最后一個元素不輸出空格服務" for(int i = N-M; i < N; i++){ count++; printf("%d",a[i]); if(count < N){ printf(" "); } } for(int i = 0 ; i < N-M; i++){ count++; printf("%d",a[i]); if(count < N){ printf(" "); } } return 0;}這個方法就是找到了元素輸出的規律,然后代碼實現之。《算法筆記》購買地址。
新聞熱點
疑難解答