| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1180 人关注过本帖
标题:请教一个指针问题
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:4 回复次数:9 
请教一个指针问题
给定一组整数,要求利用数组把这组数保存起来,再利用指针实现对数组中的数循环移动。假定共有n个整数,则要使前面各数顺序向后移m个位置,并使最后m各数变为最前面的m各数。
输入样例

11 4
15 3 76 67 84 87 13 67 45 34 45

输出样例

67 45 34 45 15 3 76 67 84 87 13


思路是怎么样的?
搜索更多相关主题的帖子: 指针 
2009-11-24 18:56
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:0 
可不可以用2个数组.?还是一定只能用指针来做.?

QQ群:96348241
2009-11-24 19:17
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
一个数组+指针

学无止境!
2009-11-24 20:11
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:1 
main()
{
 int a[11]={15,3,76,67,84,87,13,67,45,34,45};
 int *p,s,i;
 scanf("%d",&s);
 p=(int*)malloc(11*sizeof(int));
 for(i=s;i<11;i++,p++)
   {
    *p=a[i];
    printf("%d ",*p);
    }
    for(i=0;i<s;i++,p++)
     {
      *p=a[i];
       printf("%d ",*p);
     }

   getch();
    return 0;
}   想得我脑袋都块破了..看看是不是你想要的.?不过好像用2个输出来有点太什么了.等高手来改吧.
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 xy4919961 于 2009-11-24 20:19 编辑 ]

QQ群:96348241
2009-11-24 20:18
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:1 
程序代码:
/* 算法分析:
先将N-m位的数赋给一个中转变量,再将N-m前的各位数后移一位,此时将中转变量赋给第一位,后面以此推进,直到结束。*/
#include <stdio.h>
#define N 10
int main ()
{
    int a[N], i, j, m, k, b, x, temp;
    for (i = 0; i < N; ++ i)
    scanf ("%d",&a[i]);
    printf ("输入后移位数\n\t");
    scanf ("%d",&m);
    j = N - m;
    x = j;
    for (i = 0; i < m; ++ i)
    {    
        temp = a[j];
         for (k = 0, b = j - 1; k < x; ++ k, -- b)
        a[b + 1] = a[b];
        a[i] = temp;
         ++ j;
        }
    for (i = 0; i < N; ++ i)
    printf("%d\t",a[i]);
    return 0;
}

想象力征服世界
2009-11-24 21:34
绿色☆心情
Rank: 1
来 自:湖北广水
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-9-25
收藏
得分:0 
将后面的指针的值赋给前面的。
2009-11-25 14:21
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
回复 5楼 longlong89
我问的是要用指针怎么做啊........

学无止境!
2009-11-25 15:50
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
以下是引用liucs116在2009-11-25 15:50:42的发言:

我问的是要用指针怎么做啊........
你直接把五楼的变量改成指针不就可以了吗.
比如说。
int *temp
后面对temp的复制改成
 temp= &a[i];然后值后移之后,在a[0] = *temp 不就可以了吗?
2009-11-25 17:11
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:0 
。。。授人以鱼,不如授人以渔

想象力征服世界
2009-11-25 17:58
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
收藏
得分:2 
#include <stdio.h>
#include <stdlib.h>
这是个旋转移位的题目
int main(int argc, char *argv[])
{
  int n,m;      /*数据个数n和旋转移动数m*/
  int *p;        /*动态数组*/
  int i,k,temp;  /*循环变量和临时变量*/
  printf("Input n & m :");
  scanf("%d %d",&n,&m);    /*输入样例的第一行*/
  p=(int*)malloc(n*sizeof(int));     /*定义动态数组,元素个数为n*/
  for(i=0; i<n; i++)
      scanf("%d",p+i);               /*输入样例第二行*/
  for(k=0;k<m;k++)                   /*循环移位m次*/
  {
      temp=*(p+n-1);                 /*暂存最后一个元素,空出那个位置*/
      for(i=0;i<n-1;i++)            
          *(p+n-i-1)=*(p+n-i-2);     /*依次做:空出的位置保存前一个元素*/  
      *p=temp;                       /*最前面的位置保存暂存的元素----循环移位一次*/
  }                                  /*for(i)循环可以再精练些*/
  for(i=0; i<n; i++)
  {
      printf("%4d",*(p+i));
  }
  system("PAUSE");   
  return 0;
}
LZ看看满意不?
5楼作者要注意:这类题目做时,要扣紧输入样例,有关数据的个数、顺序等不会马虎!
2009-11-25 23:38
快速回复:请教一个指针问题
数据加载中...
 
   



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

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