有点偷懒了,把面试题搬了过来
移动数据
题目描述
输入n个整数(不超过10),使前面各数顺序后移m个位置,最后m个数变成最前面的m个数(m<n),写一个函数实现上述功能。
在main函数中调用该函数,最后分行输出移动后的n个数,每个数占一行。
输入输出都在main函数中进行。
n和m以及n个数都需要从键盘上进行输入。
输入
输入分三行
第一行输入一个数字(假设该数字以n表示,不超过10),表示要输入的数据个数
第二行输入以空格分隔的n个数
第三行输入后移的位置(假设该数字以m表示,m<n)
输出
分行输出移动后的数据,每个数字单独占一行。
样例输出
10
1 2 3 4 5 6 7 8 9 0
3
样例输出
8
9
0
1
2
3
4
5
6
7
我的想法很简单,在main函数里里获取n,m和输入的数据,在change函数里完成数据的移动。
#include<stdio.h>
void change (int a[10],int n,int m);
int main(void)
{
int n,m,i;
int a[20];
printf("请输入数据的个数:\n");
scanf("%d",&n);
printf("请输入数据:\n");
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("需要移动的数的个数:\n");
scanf("%d",&m);
printf("\n");
change(a,n,m);
for(i=0;i<n;i++){
printf("%d",a[i]);
if(i<n-1)
printf("\n");
}
return 0;
}
void change (int a[10],int n,int m)
{
int b[20];
int j;
for(j=0;j<m;j++){
b[j]=a[n-m+j];
}
/*这一步的目的是把a数组中后m项复制到b数组的前m项*/
for(j=n-1;j>=m;j--){
a[j]=a[j-m];
}
/*这一步是a数组中前m项后复制到b数组后n-m项*/
for(j=0;j<m;j++){
a[j]=b[j];
}
/*这一步的目的是用是a数组变成所需要的*/
/*因为用的是void函数 所以不需要返回值了*/
}