EncoreLaw
2016-05-10 05:12
采纳率: 46.2%
浏览 1.4k
已采纳

我是个学生,求大神指教!!!

题目是:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能
#include
int input(int *p)
{
int i=0;
do
{
scanf("%d",p+i);
i++;

}
while(*(p+i-1)!=-1);
return i-1;

}
int* mv(int n,int m,int p)
{

int i,b[100],*c=NULL;
for(i=0;i<m;i++)
{
b[i]=
(p+m-1);
}
for(i=0;i<n-m;i++)
{
b[m-1+i]=*(p+i);
}
c=b;
return c;
}
void output(int p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d",
(p+i));
}
}
int main()
{
int a[100],n,m,*o=NULL;
n=input(a);
printf("请输入m(把数据最后的m个数按顺序移动到最前):\n");
scanf("%d",m);
o=mv(n,m,a);
output(o,n);
return 0;
}

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 小灸舞 2016-05-10 05:49
    已采纳

    问题如下:
    1.有很多地方少了星号(*),不知道是不是复制粘贴的原因
    2.mv函数里两个for循环都有问题
    3.你不能把一个局部数组b给返回main函数,需要malloc或者new才行

     #include<iostream>
    #include<vector>
    using namespace std;
    int input(int *p)
    {
        int i=0;
        do
        {
            scanf("%d",p+i);
            i++;
        }
        while(*(p+i-1)!=-1);
        return i-1;
    }
    int* mv(int n,int m,int *p)
    {
        int *b = (int *)malloc(sizeof(int) * n);
        int i;
        for(i=0;i<m;i++)
        {
            b[i]=*(p+n-m+i);
        }
        for(i=0;i<n-m;i++)
        {
            b[m+i]=*(p+i);
        }
        return b;
    }
    void output(int *p,int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("%d ",*(p+i));
        }
    }
    int main()
    {
        int a[100],n,m,*o=NULL;
        n=input(a);
        printf("请输入m(把数据最后的m个数按顺序移动到最前):\n");
        scanf("%d",&m);
        o=mv(n,m,a);
        output(o,n);
        free(o);
        return 0;
    }
    
    

    图片说明

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • lbcab 2016-05-10 05:55

    假设你输入了1 2 3 4 5 6 7 8 9, 9个数, 你想移动后4个数到前面, 那么:
    1. 先旋转后面4个数, 结果是 1 2 3 4 5 9 8 7 6
    2. 在旋转前面5个数, 结果是 5 4 3 2 1 9 8 7 6
    3. 最后将整个数组旋转, 结果是 6 7 8 9 1 2 3 4 5

    评论
    解决 无用
    打赏 举报
  • 尼奥普兰 2016-05-10 07:20

    用个环形队列就好了吧

    评论
    解决 无用
    打赏 举报
  • 迷死她.wen 2016-05-10 13:09

    首先, 你的说的移动是怎样的移动
    比如:
    第一种: 1 2 3 4 5 6 移动四位后变成 3 4 5 6 1 2
    第二种: 1 2 3 4 5 6 移动四位后变成 6 5 4 3 1 2
    根据这两种不同的移动, 我做了不同的操作 , 希望可以帮到你, 具体代码如下(可在VS运行):
    ![![图片说明](https://img-ask.csdn.net/upload/201605/10/1462885476_697778.png)图片说明](https://img-ask.csdn.net/upload/201605/10/1462885466_368509.png)图片说明

    第一种操作演示及结果:
    ![图片说明](https://img-ask.csdn.net/upload/201605/10/1462885541_941344.png)图片说明

    第二种操作演示及结果:
    ![图片说明](https://img-ask.csdn.net/upload/201605/10/1462885572_848994.png)图片说明

    代码中有详细的注释,还有你的代码错误的地方之前几位都已经给出,你自行研究吧。

    评论
    解决 无用
    打赏 举报
  • 迷死她.wen 2016-05-10 13:17

    ![图片说明
    ![图片说明

    第一次用这个平台,有点不太懂弄,现在我再把全部代码放上去。刚才图片怎么就没有全部上传呢? 哈哈哈……

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题