题目的意思如图:
思路:
我的思路是先将前面n-m个数字向后移m的单位,然后再将剩下的m个数字移到前m个位置
代码如下:
#include<stdio.h>
#include<stdlib.h>
void Fun(int* a,int m,int n)//m为向后移的位数,n为这个数组的长度
{
if(m==0 || m>n)
{
return ;
}
int b[100]={0};//中间变量(数组)
for(int i=0;i<n;i++)
{
*(b+i)=*(a+i);//b[i]=a[i];//将要转换的数组赋值给中间变量(数组)
}
for(int i=0;i<n-m;i++)
{
*(a+m+i)=*(b+i);//a[i+m]=*(b+i);//将前面各数顺序向后移m各位置
}
for(int i=0;i<m;i++)
{
*(a+i)=*(b+n-m+i);//a[i]=*(b+n-m+i);//将最后m个数变成最前面m个数
}
}
int main()
{
int n;//要输入数组的长度
int m;//要移的m的位置
scanf("%d %d",&n,&m);
int *a=(int *)malloc(n*sizeof(int));//动态申请内存
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);//输入
}
Fun(a,m,n);
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);//输出
}
printf("\n");
free(a);//释放内存
return 0;
}
运行结果如下: