有n个整数,将最后m个数前移,最终输出新的数组

数组中移动多个数的位置,重新输出

(1)题目描述

n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面的m个数,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
有n个整数,将最后m个数前移,最终输出新的数组_第1张图片

(2)样例输入

10 20 30 40 50 60 70 80 90 100

(3)样例输出

注:假设将最后面的三个放在最前面

80 90 100 10 20 30 40 50 60 70

(4)解题思路

我们可以找一个空盒子,也就是一个空的数组,将后面的三个数先放在该数组中,然后再将前面七个也放进去,这时候这个新的数组就是我们要的那种顺序了,然后将这个数组依次放进原数组中,这时候将原数组再输出就行。
就是在考虑一个问题的时候,应该把好多方面都考虑进去,比如要移动的数字个数等于原数组中数的个数,那就相当于没有移动,就直接返回原来的数组就行,单数如果m大于了n那就相当于把m-n个数移动了,比如我想将12个数移动到最前面,但其实只有10个数,这时在移动的时候,先是依次将10个数从头到尾放到那个空盒子里,然后第11,12这两个是不存在的,就将最后面的两个数90,100再放进去了,最后呈现的结果就是 其实是全部都移动了,但是结果看起来只是移动了m-n个而已。

(5)代码

#include

int* Move(int p[],int len,int m)
{
	if(m>len) m=m-len;            //m大于n的情况
	else if(m==len) return p;     //m等于n的情况
	int tmp[100];
	int k=0;
	for(int i=len-m;i<len;i++)    //m小于n的情况
	{
		tmp[k++]=p[i];            //保存后m个数,放入新的数组中
		for(int i=0;i<len-m;i++)
	{
		tmp[k++]=p[i];           //保存前面的数,接着放入数组中
	}
	                             //tmp为移动后的目标数组
	for(int i=0;i<len;i++)
	{
		p[i]=tmp[i];            //将已经实现顺序要求的数组赋值给原数组
	}
	return p;
}

void Show(int *p)               //输出数组
{
		for(int i=0;i<10;i++)
	{
		printf("%d ",*(p+i));//p[i]
	}
}

int main()
{
	int i;
	int arr[10]={10,20,30,40,50,60,70,80,90,100};
	Move(arr,sizeof(arr)/sizeof(arr[0]),3);
	Show(arr);
	
    //上下是两种基本的输入输出方式,都可以使用
    
	//int arr[10]={10,20,30,40,50,60,70,80,90,100};            
	//Move(arr,sizeof(arr)/sizeof(arr[0]),3);                  
	//
	//	for(int i=0;i
	//{
	//	printf("%d ",arr[i]);
	//}

	return 0; 
}

小白作者解释:以上的解题思路比较凌乱,仅供参考,但是代码没有问题,若有大神有高见,可以在下面留言指点

你可能感兴趣的:(图论)