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
在这里插入图片描述

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