2566 - 指针练习-1
时间限制 : 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; }