c++中连续数列的移动问题,有个地方不懂,求解释,谢谢!
第 63 题 : 连续数列的移动(时间限制为:100毫秒)
输入n(n<100)个整数和一个整数m(m<n),将其中将前面各数顺序向后移动m个位置,最后m个数变成前面m个数。要求设计三个函数进行处理,要求满足如下要求:
编号 函数声明格式 功能描述
1 myread(int *p,int n); 将标准输入的n个整数,依次读入到p所指向的存储单元
2 process(int * p,int n) 将其中将前面各数顺序向后移动m个位置,最后m个数变成前面m个数
3 myprint(int a[],int n) 使用一行输出数组的元素值,使用一个空格隔开,
输入:
标准输入,第一行是一个正整数N和m,N代表在第2行有N个整数,m表示需要你将数组中的元素移动的长度,整数之间使用空格隔开。
输出:
将处理后的数组元素值使用一行输出,两数之间使用一个空格隔开。
样例
输入:
5 3
4 6 7 2 4
输出:
7 2 4 4 6
*/
程序代码如下:
#include<iostream>
using namespace std;
void fun(int *p, int n)
{
int i;
for(i=0;i<n;i++)
cin>>*(p+i);
}
void fun1(int *p,int n,int m)
{
int i,j,t;
for(i=0;i<n-m;i++)
{
t=*p;
for(j=0;j<n-1;j++)
*(p+j)=*(p+j+1);
*(p+j)=t; //这里不理解,还望各位帮我解释这个地方,谢谢啦
}
}
void fun2(int *p,int n)
{
int i;
for(i=0;i<n;i++)
cout<<*(p+i)<<" ";
cout<<endl;
}
int main()
{
int *p,n,m,a[1000];
p=a;
cin>>n>>m;
fun(p,n);
fun1(p,n,m);
fun2(p,n);
return 0;
}