輸入 n 和 n 個整數,再輸入 m (m < n < 100)。將數組後 m 個元素移至前面,其餘元素順序後移 m 位。輸出旋轉後數組。
直接輸出法(無需實際移動數組):
#include <stdio.h>
int main() {
int i, n, m, num[101];
while (scanf("%d", &n) != EOF) {
for (i = 0; i < n; i++) scanf("%d", &num[i]);
scanf("%d", &m);
// 輸出後 m 個
for (i = n-m; i < n; i++) {
printf("%d ", num[i]);
}
// 輸出前 n-m 個
for (i = 0; i < n-m; i++) {
printf("%d", num[i]);
if (i < n-m-1) printf(" ");
}
printf("\n");
}
return 0;
}
若需修改數組:
1. 反轉整個數組
2. 反轉前 m 個
3. 反轉後 n-m 個
時間 O(n),空間 O(1)。
輸入:
5 1 2 3 4 5 2
輸出: 4 5 1 2 3
後 2 個 (4,5) 移至前面。