6-1整段移动数组元素

请编写函数fun,函数的功能是,移动一维数组中的内容若数组中有n个整数,要求把下标从0到p(含p,p≤n-1)的数组中的元素整体向后移动,把下标从p+1到n-1的元素整体向前移动。例如,n为10,p为3,移动前,一维数组的内容为:1、2、3、4、5、6、7、8、9、10。移动后,一维数组中的内容应为:5、6、7、8、9、10、1、2、3、4。 函数接口定义: void fun(int *pArr, int p, int n) 裁判测试程序样例: #include #define N 10 void fun(int *pArr, int p, int n); int main() { int a[N]={1,2,3,4,5,6,7,8,9,10}; int i,p; scanf("%d",&p); fun(a,p,N); for(i=0;i

把p的位置固定。p-1位置的数据临时保存,把p后面的数据整体往前移动一次,以此类推。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#define N 10
void fun(int *pArr,int p,int n)
{
	int i=0;
	int *q = new int[n];
	for(i=0;i<=p;i++)
		q[n-p+i-1] = pArr[i];
	for(i=p+1;i<n;i++)
		q[i-p-1] = pArr[i];
	for(i=0;i<n;i++)
		pArr[i] = q[i];
	delete []q;
}

int main(void){
 
	int a[N]={1,2,3,4,5,6,7,8,9,10};
	int i,p;
	scanf_s("%d",&p);
	fun(a,p,N);
	for(i=0;i<N;i++)
		printf("%d ",a[i]);

	return 0;
}