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

求各位帮帮忙,谢了,连续数列的移动

风雨123 发布于 2013-03-07 21:14, 756 次点击




输入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 编辑 ]
8 回复
#2
qunxingw2013-03-07 21:59
#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<n-m;i++)//将前m个数先储存在数组b中;
       b[i]=*(p+i);

   i=0;
   for(j=n-m;j<n;j++)
      { *(p+i)=*(p+j);i++;} //将m后的依次放在前面的储存空间里。   。
   
   i=0;
   for(k=m;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;
}

[ 本帖最后由 qunxingw 于 2013-3-7 22:15 编辑 ]
#3
风雨1232013-03-07 22:29
错了。


[ 本帖最后由 风雨123 于 2013-3-7 22:31 编辑 ]
#4
qunxingw2013-03-07 23:13
有什么问题?
#5
风雨1232013-03-08 14:01
提交错了
#6
风雨1232013-03-08 14:01
结果不正确
#7
风雨1232013-03-08 14:04
回复 2楼 qunxingw
for(i=0;i<n-m;i++)//将前m个数先储存在数组b中;

        b[i]=*(p+i);
 不懂?????为什么不是for(i=0;i<m-1;i++)
                         b[i]=*(p+i);将前m个数先储存在数组b中;
#8
风雨1232013-03-08 16:29
程序代码:
#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;i++)
       b[i]=*(p+n-m+i);i=0;//????不知道什么意思?
  
   for(i=n-m-1;i>=0;i--)
    {
        *(p+i+m)=*(p+i);//????不知道什么意思?

    }
    for(i=0;i<m;i++)
    {
        *(p+i)=b[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;
}
求解释???
#9
qunxingw2013-03-08 17:05
2楼思想与你原注释的有异。主要是1,将m个数左边的原数放b中。 2,将原m个数放最左边。3,将b中数放右边。未作仔细测试。
你最新代码,你首先要了解逻辑思想,自己慢慢理解吧。
1