首页
社区
课程
招聘
[推荐][讨论]程序优化
发表于: 2010-12-14 16:36 4216

[推荐][讨论]程序优化

2010-12-14 16:36
4216
编程要求:输出如下图形
EDCBABCDE
*********
*F*****F*
G*G*G*G*G
*********
*********
G*G*G*G*G
*F*****F*
*********
EDCBABCDE

编程目标:用尽量简洁、高效的代码写出完成上述程序

以下是我的一个程序,但不是最精简的,效率肯定也是不好的。各位看看怎样实现能够更加高效且代码简洁。

char Char[9]={0,A,B,C,D,E,F,G,*,}
int i,j;
for(i=1;i<=10;i++)
{
  if(i==1||i==10)
    for(j=0;j<5;j++)
  {
    print(Char[j],i,-j);
    print(Char[j],i,j);
  }
  else if(i==3||i==8)
  {
    print(Char[6],i,-3);
    print(Char[6],i,3);
  }
  else if(i==6||i==7)
    for(j=0;j<5;j+=2 )
  {
    print(Char[7],i,-j);
    print(Char[7],i,j);
  }
  else
    for(j=0;j<5;j++)
  {
    print(Char[8],i,-j);
    print(Char[8],i,j);
  }
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 288
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
程序中忘写注释了,做点补充说明。
程序设定坐标(1,0)在最上面的A位置。其中print(Char[],i,j);表示在坐标(i,j)处输出相应字符
不过我想考虑到图形既是上下对称又是左右对称的,如果利用这一点,是不是能够让程序再简练一点呢?

好像大伙儿对这样的问题不感兴趣啊!我改进的代码贴一下:

char Char[9]={'0','A','B','C','D','E','F','G','*',}
int i,j;
for(i=1;i<10;i+=2)
{
        if(i==9)
                for(j=0;j<5;j++)
        {//绘制A、B、C、D、E
                print(Char[j],i,-j);
                print(Char[j],i,j);
                print(Char[j],-i,j);
                print(Char[j],i,-j);
        }
        else if(i==5)
        {//绘制F
                print(Char[6],i,-3);
                print(Char[6],i,3);
                print(Char[6],-i,3);
                print(Char[6],-i,-3);
        }
        else if(i==3)
                for(j=0;j<5;j+=2 )
        {//绘制G
                print(Char[7],i,-j);
                print(Char[7],i,j);
                print(Char[7],-i,-j);
                print(Char[7],-i,j);
        }
        else
                for(j=0;j<5;j++)
        {//其他空白(*)
                print(Char[8],i,-j);
                print(Char[8],i,j);
                print(Char[8],-i,-j);
                print(Char[8],-i,j);
        }
}
这个代码比第一个要规范一点,在前面声明一下print函数,放到上main()应该就可以编译通过了。
2010-12-14 17:20
0
雪    币: 288
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不给力呀!
我不知道这两种方式哪个效率更高:
1、
for (int i=1;i<4 ;i++ )
{
        print(a[i]);
}
2、
for (int i=1;i<2 ;i++ )
{
        print(a[i]);
        print(a[-i]);
}

其实我感觉第二个程序中当i或者j为0时也要多执行一次。我再改改。。。
2010-12-14 19:28
0
雪    币: 288
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
OK啦!我觉得已经找到自己满意的结果了,程序如下:

char Char[9]={'E','D','C','B','A','B','C','D','E'}
int i,j;
for (i=0;i<10 ;i+=9 )
{//依次绘制E、D、C、B、A、B、C、D、E
        for (j=0;j<9 ;j++ )
        {
                print(Char[j],i,j);
        }
}
for (i=2;i<8 ;i+=5 )
{//绘制四个F
        for (j=1;j<9 ;j+=7 )
        {
                print('F',i,j);
        }
}
for (i=3;i<8 ;i+=3 )
{//绘制两行G
        for (j=0;j<9 ;j+=2 )
        {
                print('G',i,j);
        }
}

因为我给的图中*本来就是站位用的,所以不用画,我定义Char数组,其中有重复,但是这可以减少代码量,典型的以空间换时间。呵呵!自我陶醉一下!
这个程序没有冗余工作,代码也很简洁。不错,我就喜欢这样的编程风格。
如果还有更高明简洁的方式,也请大家指教!不胜感激!
2010-12-14 19:53
0
雪    币: 614
活跃值: (883)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
printf("EDCBABCDE\n");  
printf("*********\n");  
printf("*F*****F*\n");  
printf("G*G*G*G*G\n");  
printf("*********\n");  
printf("*********\n");  
printf("G*G*G*G*G\n");  
printf("*F*****F*\n");  
printf("*********\n");  
printf("EDCBABCDE\n");  
这样最高效,哈哈
2010-12-16 15:29
0
雪    币: 7276
活跃值: (2043)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
This is the truth, although it is funny.
2010-12-16 15:37
0
雪    币: 86
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
printf("EDCBABCDE\n*********\n*F*****F*\nG*G*G*G*G\n*********\n");
2010-12-18 09:40
0
雪    币: 38
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
这个真的是很
高效
2011-1-6 21:21
0
雪    币: 129
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好强大啊呵呵
2011-6-5 20:09
0
游客
登录 | 注册 方可回帖
返回
//