原题链接:[编程入门]自定义函数之数字后移
解题思路:
根据题意,有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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复