循環移動
題目描述
給定一組整數,要求利用數組把這組數保存起來,然后實現對數組的循環移動。假定供有n個整數,則要使前面各數順序向后移m個位置,并使最后m個數變為最前面的m個數(m<n)。
注意,不要用先輸出后m個數,再輸出前n-m個數的方法實現,也不要用兩個數組的方式實現。
要求只用一個數組的方式實現,一定要保證在輸出結果時,輸出的順序和數組中數的順序是一致的。
關于輸入
輸入有兩行:第一行包含一個正整數n(n<=100)和一個正整數m,第二行包含n個正整數。每兩個正整數中間用一個空格分開。
關于輸出
輸出有一行:經過循環移動后數組中整數的順序依次輸出,每兩個整數之間用空格分隔。
例子輸入
11 4 15 3 76 67 84 87 13 67 45 34 45
例子輸出
67 45 34 45 15 3 76 67 84 87 13
提示信息
解題分析
首先通過scanf()函數獲取輸入,之后將獲取的整數保存到一個數組中。然后,我們將這個數組整體反轉,接著將前m個元素再次反轉,最后將后n-m個元素反轉。反轉三次后,就得到了我們想要的結果。我們再通過printf()函數將反轉后的數組輸出。
代碼實現
#include <stdio.h>void reverse(int* nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}
}int main(void) {int n, m;scanf("%d %d", &n, &m);int nums[100];for (int i = 0; i < n; i++) {scanf("%d", &nums[i]);}// 將nums的各元素反轉三次: 整個反轉、前m個反轉、后n-m個反轉reverse(nums, 0, n - 1);reverse(nums, 0, m - 1);reverse(nums, m, n - 1);// 輸出結果for (int i = 0; i < n; i++) {if (i != 0)printf(" ");printf("%d", nums[i]);}return 0;
}