游客 Signup | Login
中文 | En

2568 - 指针练习-3

编写一个函数myAdujst,其功能是对给定的n个整数进行位置调整,调整方案是:后面m个数移到最前面,而前面的n-m个数顺序向后排。

函数原型可参考如下:

void  myAdjust (int *p,  int  n,  int  m);

其中,p为指向数组首元素的指针,n为数组中的元素个数,m为移到前面的数的个数。

如,数组中的原始数据为:1、0、3、4、8、2、5,数组长度为7,m为3,则移动的结果是8、2、5、1、0、3、4。

编写程序,从键盘输入一个正整数n(1<=n<=100),代表数据元素个数,接着输入n个整数,代表数组元素的初始值,最后输入要移动到前面的数的个数m(1<=m<n),调用myAdujst函数处理完毕后,在主函数中输出数据移动后的结果。输出的两个数据之间用空格分隔。

Input

6 3 1 6 4 7 10 2

Output

7 10 3 1 6 4

Examples

Input

10 3 9 6 8 7 1 3 4 9 5 4

Output

3 4 9 5 3 9 6 8 7 1

Solution C

#include<stdio.h>
int main()
{
	void  myAdjust (int *p,  int  n,  int  m);
	int n, a[100], m, *p, i;
	p = a;
	scanf("%d", &n);
	for(i=0; i<n; i++)
	{
		scanf("%d", &a[i]);
	}
	scanf("%d", &m);
	myAdjust ( p, n, m);
	for(i=0; i<n; i++)
	{
		printf("%d ", a[i]);
	}
}



void  myAdjust (int *p,  int  n,  int  m)
{
	int i, j, b[100];
	for(i=n-m, j=0; i<n; i++, j++)
	{
		b[j] = *(p+i);
	}



	for(i=n-1, j=n-m-1; i>0; i--, j--)
	{
		*(p+i) = *(p+j);
	}

	for(i=0; i<m; i++)
	{
		*(p+i) = b[i];
	}


} 

Solution C++

                                                                                                     #include <stdio.h>
int main()
{
	void  myAdjust (int *p,  int  n,  int  m);
	int n, a[100], m, *p, i;
	p = a;
	scanf("%d", &n);
	for(i=0; i<n; i++)
	{
		scanf("%d", &a[i]);
	}
	scanf("%d", &m);
	myAdjust ( p, n, m);
	for(i=0; i<n; i++)
	{
		printf("%d ", a[i]);
	}
}
void myAdjust(int *p,int n,int m)
{    int i;
    for(i=n-1;i>=0;i--)      
	{
	  *(p+i+m)=*(p+i);	
	}

    for(i=n;i<n+m;i++) 
	{   

		*p++=*(p+n);

	}

}



























Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题