原题链接:[编程入门]自定义函数之数字后移
解题思路:
根据题意,有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分
12 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复