| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 383 人关注过本帖
标题:新手求助。。。望指点哈。。
只看楼主 加入收藏
Jveryl
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-10-26
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
新手求助。。。望指点哈。。
用指针操作将一个一维数组中的n个整数做以下处理:顺序将前面各数后移m个位置,使最后面的m个数变成最前面的m个数。


这个思路应该从哪里入手。。。谢谢
2010-11-22 17:03
cacker
该用户已被删除
收藏
得分:7 
提示: 作者被禁止或删除 内容自动屏蔽
2010-11-22 20:58
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
#include<iostream>
using namespace std;

void main()
{
    int m,j,i,t;
    cin>>m;
    int a[20]={0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0,0};
    for(i=9;i>0;i--)
        a[i+m]=a[i];
    for(j=9+m;j>9;j--)
        a[j-9]=a[j];
    for(int k=0;k<20;k++)
        cout<<a[k]<<" ";
}应该可以

                                         
===========深入<----------------->浅出============
2010-11-22 22:34
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
#include<iostream>
using namespace std;

void main()
{
    int m;
    cin>>m;
    int a[20]={0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0,0};
    for(int *i=a+9;i>a;i--)
        *(i+m)=*i;
    for(int *j=a+9+m;j>a+9;j--)
        *(j-9)=*j;
    for(int k=0;k<20;k++)
        cout<<a[k]<<" ";
}

看错了  指针的  道理是一样的  

                                         
===========深入<----------------->浅出============
2010-11-22 22:46
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:7 
楼上的故意把数组写大了,这样固然是一种解决方法,可是如果数组的大小是正好合适的呢。
2010-11-23 10:28
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
如果单纯用指针的话,是不是可以采用递归。。用指针P开始指向数组第一位;操作是:每次把最后m个数和前面m个数互换位置;一直递归处理;
直到n-m <= m
2010-11-23 10:52
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
程序代码:
#include<iostream>
using namespace std;

int change(int *p, int n, int m)
{
    int i,temp;
    if (n <=0 || m <= 0  )
        return 0;                  //当数组或者需要交互的数都为0时,结束递归!
    if (n-m > m)                //数组前面的数据个数大于m时,直接进行交互,并改变指针值,进入下次递归;
    {

        for (i =0; i < m; i++)
        {
            temp = p[i];
            p[i] = p[n-m+i];
            p[n-m+i] = temp;
        }
        p = p+m;
        change(p, n-m, m);
    }
    else                                 //当数组前面的数据小于m时,重新考虑数组,把m的值给成n-m,只交换一部分,然后再次进入递归!
    {
        for (i =0; i< n-m; i++)
        {
            temp = p[i];
            p[i] = p[n-m+i];
            p[n-m+i] = temp;
        }
        p = p+n-m;
        change(p, m,2*m-n);
    }

    return 0;
}
int  main()
{
    int m,i;
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    cout << "please input m:\n"<< endl;
    cin >> m;
    int *p;
    p = a;

    change(p, 10, m);
    for (i = 0; i< 10; i++)
        cout << a[i] << " " ;   //这里写a[i]和p[i]结果是一样的,就不多说了。。
    return 0;
   

}
采用递归,每次把最后m个数组和最前面的m个数互换,然后在对数组后面的n-m个数进行相同的操作;
需要注意的一点是n-m和m值的大小,影响数据的交换过程!


[ 本帖最后由 hoho568 于 2010-11-23 11:21 编辑 ]
2010-11-23 11:18
快速回复:新手求助。。。望指点哈。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019450 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved