注册 登录
编程论坛 C++教室

c++中连续数列的移动问题,有个地方不懂,求解释,谢谢!

天涯浪子0ne 发布于 2013-05-08 19:01, 580 次点击
第 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;
}
0 回复
1