题目:将数据集合的前m个元素移至最后。例:3,2,5,8,4,7,6,9 m=3,则移动后为 8,4,7,6,9,3,2
针对这个问题可以通过三种方法解决:
方法一:定义一个int型变量x,将数组中a[0]赋给x,其余元素以此前移,最后将x赋给a[n-1]。将此过程循环m次,完成元素的移动。具体实现代码如下:
#include<stdio.h>
int main(void)
{
int a[8]={3,2,5,8,4,7,6,9};
int m;
printf("请输入移动前几个元素:");
scanf("%d",&m);
void MoveElement(int a[],int n,int m);
MoveElement(a,8,m);
for(int i=0;i<8;i++)
printf("%5d",a[i]);
return 0;
}
void MoveElement(int a[],int n,int m)
{
int i,j,x;
for(i=0;i<m;i++)
{
x=a[0];
for(j=0;j<n-1;j++)
a[j]=a[j+1];
a[j]=x;
}
}
方法二:定义一个与数组a[8]={3,2,5,8,4,7,6,9}大小相同的内存单元b,首先将后n-m个元素依次赋给数组b的前n-m个单元,再把数组a的前m个元素依次赋给数组b的b[n-m]至b[n-1],此时数组b的元素已经是移动后的数据元素,但是由于数组b是临时分配的单元,使用后要释放,所以再将数组b中的元素依次赋给数组a。具体实现代码如下&#