2 encorelaw EncoreLaw 于 2016.05.10 13:12 提问

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

题目是:有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;
}

6个回答

qq423399099
qq423399099   Ds   Rxr 2016.05.10 13: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;
}

图片说明

EncoreLaw
EncoreLaw 回复小灸舞: 大哥可以给个QQ吗,嘻嘻
大约 2 年之前 回复
EncoreLaw
EncoreLaw 回复小灸舞: 大哥可以给个QQ吗,嘻嘻
大约 2 年之前 回复
EncoreLaw
EncoreLaw 回复小灸舞: 非常感谢你啊!你可以帮我看看我编写程序的风格有没有哪里有问题啊,或者说命名方面又没什么可以改进的
大约 2 年之前 回复
qq423399099
qq423399099 回复EncoreLaw: int b[100]这样的写法,数组是在栈上申请的空间,超出作用域系统会自动释放空间,但栈的空间有限,只有1~10M,而malloc是在堆上申请的空间(有好几个G),只要不主动free,那么只有等程序结束才会释放,对于小程序就算不free也不会有问题,但如果是一个服务器程序,几年不关的,楼主你想想,如果只malloc而不free那么空间一旦用尽肯定崩溃
大约 2 年之前 回复
EncoreLaw
EncoreLaw 回复小灸舞: 为什么要释放o啊?
大约 2 年之前 回复
qq423399099
qq423399099 回复EncoreLaw: int *b = (int *)malloc(sizeof(int) * n); 就是开辟了sizeof(int) * n个字节的空间,并且将首地址返回,free就是释放空间。。。楼主可以查看malloc/free的用法
大约 2 年之前 回复
EncoreLaw
EncoreLaw int *b = (int *)malloc(sizeof(int) * n); 和 free(o); 大哥,这句是什么意思啊?可以详细一点讲解下吗
大约 2 年之前 回复
CSDNXIAON
CSDNXIAON   2016.05.10 13:22

求大神指教
求大神指教
求大神指教 context.lookup()查找weblogic中的ejb
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

lbcab
lbcab   2016.05.10 13: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

EncoreLaw
EncoreLaw 谢谢啦!
大约 2 年之前 回复
u011889952
u011889952   2016.05.10 15:20

用个环形队列就好了吧

EncoreLaw
EncoreLaw 我去百度下这个排列
大约 2 年之前 回复
huangenwen
huangenwen   2016.05.10 21: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)图片说明

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

huangenwen
huangenwen   2016.05.10 21:17

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

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

huangenwen
huangenwen OK!
大约 2 年之前 回复
EncoreLaw
EncoreLaw 谢谢你啊!!
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
第一种解法: [cpp] view plaincopyprint? /*  *copyright@nciaebupt 转载请注明出处  *问题:有两个序列a,b,大小都为n,序列元素的值任意整数,无序;  *要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。  *比如 a=[100 ,99 ,98
计算器小型应用
小型计算器功能不太完善 求各位大神指教
生成公、私钥
WIN32(RSA密钥生成工具), 这个安装软件我安装到最后需要花钱购买是我安装错了还是什么其他问题求大神指教谢谢
Matlab实现Z曲线
MATLAB实现Z曲线(学生一枚,请大神指教)
大神们,求指教!!!
大神们!求指教!!    面、向、对、象、 怎么学啊, 谢谢,请留言........ 面、向、对、象
求大神们指教
都已经定义了,为什么出现如下错误,求大神们指教。 1>main.obj : error LNK2019: 无法解析的外部符号 "public: char __thiscall LinkStack::Pop(void)" (?Pop@?$LinkStack@D@@QAEDXZ),该符号在函数 _main 中被引用 1>main.obj : error LNK2019: 无法解析的外部符号 "
求大神指教
#ifndef RATIONAL_H_INCLUDED #define RATIONAL_H_INCLUDED #include using namespace std; int gy(int x,int y) {     int k;     if(x>y)     {         k=x;         x=y;         y=k;     }     w
求大神指教!!!
菜单 为什么window.top.frames仅仅兼容IE 火狐 ,而欧朋谷歌不支持???
有个计算机大神的男朋友是个什么感觉?
工作以来,事情有点多,推送渐少,还请各位兄台包涵。虽说工作上不忙,但是每天下班回来洗洗、看看书时间也就过去了,打开微信公众号看看大家的后台留言,想到该推送了,但是不知道写点什么,毕竟我也不想污染你们的微信公众号消息,也就每次周末的时候,可以静下心来再写写文章与总结。 这样就有人要问了,那今天周五你怎么写文章了?这篇文章不是我写的,是我女朋友写的,关于这篇文章的由来,她有一个小故事
一个用C++写的求最短路径的代码
一个一个用C++写的求最短路径的代码,可以直接使用,若有不足的地方,请各位大神指教