爱编程的小笨孩


私信TA

用户名:2119394720

访问量:727

签 名:

我在成长,总有一天我会足够优秀。

等  级
排  名 2155
经  验 1866
参赛次数 2
文章发表 30
年  龄 0
在职情况 学生
学  校 黄河科技学院
专  业 软件工程

  自我简介:

一只想要当凤凰的鸡

解题思路:
根据题意,有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分

2 人评分

  评论区

够详细 支持大佬
2022-06-28 18:32:25 | |
  • «
  • 1
  • »