2566 - 指针练习-1

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

编写一个函数myMove,其功能是将一个数组中的所有为0的元素移至数组末尾,并保持数组非0元素的相对顺序不变。

函数原型可参考如下:

void  myMove(int *p, int len);

其中,p为指向数组首元素的指针,len为数组中的元素个数。

如,数组中的原始数据为:1,0,3,4,0,2,5。则经过函数处理后的数组元素为:1,3,4,2,5,0,0。

编写程序,从键盘输入一个正整数n(1<=n<=100),代表数据元素个数,接着输入n个整数(其中包含若干个0),代表数组元素的初始值,调用myMove函数处理完毕后,输出最终的数据元素,元素之间用空格分隔。

题目输入

8 8 2 6 0 0 2 0 1

题目输出

8 2 6 2 1 0 0 0

输入/输出样例

输入格式

10 7 6 5 3 9 8 8 0 0 2

输出格式

7 6 5 3 9 8 8 2 0 0

C语言解答

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


void  myMove(int *p, int l)
{
	int i, j, t;
	for(i=0; i<l-1; i++)
	{
		for(j=0; j<l-i-1; j++)
		{
			if(*(p+j)==0 && *(p+j) <= *(p+j+1))
			{
				t = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = t;
			}
		}

	}

}

C++解答


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