| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1233 人关注过本帖
标题:一道c语言题目 无从下手。。求大神帮帮忙 。
只看楼主 加入收藏
f14011123
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-11-9
结帖率:90.91%
收藏
已结贴  问题点数:14 回复次数:12 
一道c语言题目 无从下手。。求大神帮帮忙 。
已有定义和初始化:int a【10】=(1,2,3,4,5,6,7,8,9,10)。编写程序,将数组a中元素的值进行如下方式的移动:原倒数第二个元素值移到第一位,原倒数第一个元素值移到第二位,其余各元素值向右依次移动两位。移动后的数列为:9,10,1,2,3,4,5,6,7,8.    大神们可以随意指导下,下来自己再琢磨琢磨。


#include<stdio.h>
void main()
 {
   int a[10]=(1,2,3,4,5,6,7,8,9,10);
   int i,j,t,loop;
   for(i=0;i<10;i++)
     scanf("%d",&a[i]);
   for(j=0;j<=10;j++)
    {
      loop=1
      for(i=0;i<=9;i++)
      t=a[i];
      a[i]=a[i+1];
      a[i+1]=t;
    }
   if(loop)
     break;
   for(i=0;i<10;i++)
   printf("%d",a[i]);
  printf("\n");
}

































90

[ 本帖最后由 f14011123 于 2014-11-16 22:01 编辑 ]
搜索更多相关主题的帖子: 编写程序 include c语言 倒数 元素 
2014-11-16 21:29
steps
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2014-11-14
收藏
得分:7 
#include<stdio.h>
void main()
{
   int a[10] = {1,2,3,4,5,6,7,8,9,10};
   int b[10]={0},i;
   for(i=0;i<10;i++)
   {
       b[(i+2)%10]=a[(i)];
   }
   for(i=0;i<10;i++)
   printf("%d ",b[i]);
   printf("\n");
}
2014-11-16 22:00
f14011123
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-11-9
收藏
得分:0 
回复 2 楼 steps
b[(i+2)%10]=a[(i)]这个的意思是什么?c语言这东西太难了
2014-11-16 22:07
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:7 
回复 3 楼 f14011123
b[(i+2)%10]=a[(i)]即将a[(i)]的数值赋给对(i+2)求的余数

#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2014-11-16 22:59
f14011123
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2014-11-9
收藏
得分:0 
回复 4 楼 七夜之华
大概懂了谢谢啊
2014-11-17 11:25
ffbh
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:10
注 册:2015-1-15
收藏
得分:0 
回复 2楼 steps
厉害
2015-01-16 14:43
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
回复 2楼 steps
经典

授人以鱼,不如授人以渔
2015-01-16 15:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
练习题的目的不是求一个答案。
这道题的目的是让你思考一下rotate算法,这是一种常用的算法。

首先,不要重开一个数组,这样就失去题目本意了;
其次,题目中固定为10和2,而你要思考的应当是: 长度为m的数组,右移n位,当如何做?

不管是自己想,还是去网上找,你应当能找到3种方法(烂方法不算)
第一种方法:先将 {1,2} 和 {9,10} 交换,然后考虑怎么交换 {3,4,5,6,7,8} 和 {1, 2}。很容易想到吧,立马从m=10,n=2的数量降低到m=8,n=2了,继续迭代下去就行了。
第二种方法:全部反序,然后前面两个反序,后面八个反序。描述起来很简洁。
第三种方法:循环gcd(m,n),每个元素后移n位。这个算法最适合用在数组上,而上两个方法,一个最适合单向链表,一个最适合双向链表
2015-01-16 15:43
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
不就是一个循环右移吗,简单处理即可。
#include <stdio.h>
void rightmov(int *p)
{
    int i,j;
    j=*(p+9);
    for(i=9;i>0;i--)
        *(p+i)=*(p+i-1);
    *p=j;

}
void main()
{
    int i,a[10]={1,2,3,4,5,6,7,8,9,10};
    rightmov(a);
    rightmov(a);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
}

能编个毛线衣吗?
2015-01-16 16:56
zhangchao123
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-1-7
收藏
得分:0 
你才开始接触c语言,那就用最简单的办法吧。先输出啊a[8]和a[9];然后在再输出1-8的值。
#include<stdio.h>
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int i,j,k;
    k=a[8];
    a[8]=a[9];
    a[9]=k;
    printf("%4d%4d",a[9],a[8]);
    for(i=0;i<8;i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
}
2015-01-18 20:57
快速回复:一道c语言题目 无从下手。。求大神帮帮忙 。
数据加载中...
 
   



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

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