关于这个题目的代码细节,求大佬带孩子会。

 

简单点的话就是再建一个大小一样的数组,然后进行数组复制就可以了。时间复杂度一样,空间复杂度稍多一点,但程序简单

复杂点就是记录一个临时变量,用来作为数据项交换的缓冲区,时间复杂度一样,空间复杂度少,但程序逻辑啰嗦一些

设计思想:先把p位之前的数组暂存,然后将p位之后的数据左移p位,最后将前面的p个数据移动到数组后面。

代码如下,如有帮助,请采纳一下,谢谢。

#include <stdio.h>
//数组a元素左移m位
void moveLeft(int a[],int size,int m)
{
	int i = 0;
	int *p = new int[m];
	for (i = 0; i < m;i++)
	{
		p[i] = a[i];  //暂存a的前m个数据
	}
	//将m位后的数据左移
	for (i = m; i < size; i++)
	{
		a[i-m] = a[i];
	}
	//将前m个元素移动到a的后面
	for (i = 0; i<m;i++)
	{
		a[size-m+i] = p[i];
	}
	delete[] p;
	p = 0;
}

void main()
{
	int i = 0;
	int size;
	int p;
	int arr[10] = {0};
	printf("请输入数组的个数:");
	scanf("%d",&size);
	printf("请输入数组的元素:");
	for (i = 0; i < size;i++)
	{
		scanf("%d",&arr[i]);
	}
	printf("请输入左移位数:");
	scanf("%d",&p);
	moveLeft(arr,size,p);

	printf("移动后:");
	for(i = 0; i < size; i++)
		printf("%d ",arr[i]);
	printf("\n");
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632