求各位帮帮忙,谢了,连续数列的移动
输入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 myread(int *p,int n)//输入函数。
{
int i;
for(i=0;i<n;i++)
cin>>*(p+i);
}
void process(int *p,int n,int m)
{
int b[100],i,j,k;
for(i=0;i<m-1;i++)//将前m个数先储存在数组b中;
b[i]=*(p+i);
i=0;
for(j=m-1;j<n;j++)
{ *(p+i)=*(p+j);i++;} //将m后的依次放在前面的储存空间里。 //我觉得这应该错了,但是看不出来。
i=0;
for(k=n-m+1;k<n;k++)//将b数组中的元素依次放在m以后的指针里。
{*(p+k)=b[i];
i++;}
}
void myprint(int a[],int n)//输出函数。
{
int i;
for(i=0;i<n;i++)
{
if(i==0)
cout<<a[i];
else if(i>0)
cout<<" "<<a[i];
}
cout<<endl;
}
int main()
{
int n,m,a[100];
cin>>n>>m;
if(n<100 && m<n)
{
myread(a,n);
process(a,n,m);
myprint(a,n);
}
return 0;
}
不知道哪里错了,求解。
[ 本帖最后由 风雨123 于 2013-3-7 21:22 编辑 ]