Xcode寫C++(程序練習12:有n個整數,使前面各數順序向後移m個位置,最後m個數變成最前面m個數)

有n個整數,使前面各數順序向後移m個位置,最後m個數變成最前面m個數。見下圖。寫一函數實現以上功能,在主函數中輸入n個整數和輸出調整後的n個數。在這裏插入圖片描述

1⃣️:原本的數據,記n=10、m=3
在這裏插入圖片描述

2⃣️:將後三個數據取出放入一個新容器中

3⃣️:將前面七個數據向後移動三位,再將後三個數據挪進去
在這裏插入圖片描述

4⃣️:創建一個新格子,格子大小爲m(運用到動態內存)

在這裏插入圖片描述

5⃣️:將7先向後移動三位,i的位置表示爲I=n-m-1
在這裏插入圖片描述

6⃣️:n-m個數字移動完後,將整個格子挪到前面的位置中

在這裏插入圖片描述

#include <stdio.h>
void Move(int *arr,int m,int n)
{
    assert(arr!=NULL);
    if(m<=0||n<=0||m>=n)//不用挪
        return;
    
    int *brr = (int *)malloc(m*sizeof(int));
    int i;
    /*for(i=n-m;i<n;i++)
    {
        brr[i-n+m] = arr[i];//i作爲arr下標,容器下標爲i-(n-m)
    }*/
    for(i=0;i<m;i++)//i作爲brr下標
    {
        brr[i] = arr[i+n-m];
    }
    
    //將arr前段數據後移
    for(i=n-m-1;i>=0;i--)
    {
        arr[i+m] = arr[i];
    }
    
    for(i=0;i<m;i++)
    {
        arr[i] = brr[i];
    }
    
    free(brr);
}

void Show(int *arr,int len)
{
    for(int i=0;i<len;i++)
    {
        printf("%d",arr[i]);
    }
    printf("\n");
}

int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    Move(arr,3,sizeof(arr)/sizeof(arr[0]));
    Show(arr,sizeof(arr)/sizeof(arr[0]));
    return 0;
}

令m=3,將12345678910移動結果輸出:
89101234567
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章