解题思路:
根据题意,有n个整数,要使前面各数顺序向后移m个位置,最后m个数变成前面m个数。如果要实现此操作,利用数组会更方便一些,因此定义一个数组arr,数组长度设为100以防数组长度不够导致越界,然后定义n,m分别用来表示整数的个数和要移动的个数。

在fun函数中,完成数字后移的操作,首先需要将后m个数字保存到其他空间里边,可以直接保存到数组后半部分没利用的空间里边,用以下代码实现:

for(i=n-1;i>n-1-m;i--)
   {
       arr[i+m]=arr[i];
   }

然后再将数组中的每个元素都后移m个位置,从第n-m个数开始往后移动,用以下代码实现:

for(i=n-1;i>=0;i--)
   {
       arr[i]=arr[i-m];
   }

最后再将第一步中保存在其他空间里边的后m个数字移动到前m个位置即可,用以下代码实现:

 for(i=0;i<m;i++)
   {
       arr[i]=arr[n+i];
   }

注意事项:
本题解题思路很容易理解,但是由于代码中变量过于多所以可能会导致读者感到混淆,如果感觉看不懂代码,笔者建议可以直接把题中变量用题中的数据来表示,比如将数字的数量n直接用10表示,移动的位置m用2表示,然后再尝试读代码。
参考代码:

#include<stdio.h>
void fun(int arr[],int n,int m)
{
   int i;
   //for循环将需要移动的后m个数保存在数组的后边
   for(i=n-1;i>n-1-m;i--)
   {
       arr[i+m]=arr[i];
   }
   //将数组中每个元素往后移动m个位置
   for(i=n-1;i>=0;i--)
   {
       arr[i]=arr[i-m];
   }
   //将需要移动的后m个元素移动到前m个元素里
   for(i=0;i<m;i++)
   {
       arr[i]=arr[n+i];
   }
}
int main()
{
    //定义n用来保存需要输入n个整数
    int n;
    //定义m用来保存需要移动的位数
    int m;
    //定义输入arr用来保存需要输入的n个整数
    int arr[100];
    scanf("%d",&n);
    for(int i;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    scanf("%d",&m);
    //调用函数fun用来处理这n个数
    fun(arr,n,m);
    for(int i;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}


点赞(0)
 

0.0分

12 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

wdgwthw 2年前 回复TA
orz
wzc2022 2年前 回复TA
够详细 支持大佬