首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

數組循環右移:後m個元素移至前面的原地旋轉算法實現

     編輯:關於C語言

問題描述

輸入 n 和 n 個整數,再輸入 m (m < n < 100)。將數組後 m 個元素移至前面,其餘元素順序後移 m 位。輸出旋轉後數組。

算法思路

直接輸出法(無需實際移動數組):

  1. 先輸出索引 n-m 到 n-1 的元素
  2. 再輸出索引 0 到 n-m-1 的元素
  3. 注意空格格式:元素間有空格,行末無尾隨空格

代碼實現

#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) 移至前面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved