題目描述:數組
一個數組A中存有N(>0)個整數,在不容許使用另外數組的前提下,將每一個整數循環向右移M(≥0)個位置,即將A中的數據由(A0 A1 ⋯AN−1 )變換爲(AN−M ⋯AN−1 A0 A1 ⋯AN−M−1 ) (最後M個數循環移至最前面的M個位置)。若是須要考慮程序移動數據的次數儘可能少,要如何設計移動的方法? 輸入格式: 每一個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數,之間用空格分隔。 輸出格式: 在一行中輸出循環右移M位之後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。 輸入樣例: 6 2 1 2 3 4 5 6 輸出樣例: 5 6 1 2 3 4
本人AC代碼:測試
// 將數組右移兩位 // 經過控制數組的下標來輸出元素 # include <stdio.h> int main(void) { int n, temp; // n爲輸入的總長度,temp爲須要移動的位數 int A[100]; int flag = 0; int i, k; scanf("%d %d",&n, &temp); temp = temp%n; // 輸入數組元素 for (i=0; i<n; i++) { scanf("%d",&A[i]); } /* // 輸出元素, 方法一 for (i=0; i<n; i++) { if (i<temp) flag = 1; else flag = 0; if (flag == 1) { k = n-temp+i; // 輸出 5 6 } else { k = i-temp; // 輸出 1 2 3 4 } printf("%d",A[k]); if (i+1 != n) { printf(" "); } } */ // 輸出元素,方法二 for (i=0; i<n; i++) { k = (i+n-temp)%n; printf("%d",A[k]); if (i+1 != n) { printf(" "); } } return 0; }