2568 - 指针练习-3
时间限制 : 1 秒
内存限制 : 128 MB
编写一个函数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函数处理完毕后,在主函数中输出数据移动后的结果。输出的两个数据之间用空格分隔。
题目输入
6 3 1 6 4 7 10 2
题目输出
7 10 3 1 6 4
输入/输出样例
输入格式
10 3 9 6 8 7 1 3 4 9 5 4
输出格式
3 4 9 5 3 9 6 8 7 1
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]; } }
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); } }