解题思路:通过二位数组解决问题

注意事项:观察图形规律

参考代码:

#include <stdio.h>

int main()

{

int n,l,i,j,k;

scanf("%d",&n);

l=4*n+5;//通过观察得出数组大小与所输入层数的关系;

char a[l][l];

for(i=0;i<l;i++)

{

for(j=0;j<l;j++)

{

a[i][j]='.';//先将数组中所有数据转为'.',以便简化后续操作

}

}

//通过观察发现,最内层的图形与输入层数无关,所以现确定最内层图形;

      for(k=l/2-2;k<=l/2+2;k++)//最内层图形由整个数组中心向四周延伸两个字符;

  {

  a[l/2][k]='$';

  a[k][l/2]='$'; 

  }

//确定完最内层图形后,需观察层数与所对应图形的规律;

  for(i=n;i>=1;i--)

  {

  for(j=l/2-2*i;j<=l/2+2*i;j++)//每层'$'图形都是由中间向两边延伸2*该层层数;

  {

  a[-2*i+2*n][j]='$';//-2*i+2*n为每层所在位置与该层层数的关系:由等差数列推导关系式

  a[j][-2*i+2*n]='$';

  a[l-(-2*i+2*n)-1][j]='$';//由对称可得l-(-2*i+2*n)-1

    a[j][l-(-2*i+2*n)-1]='$';

  }

  }

  for(i=n;i>=1;i--)

  {

//打印每层图形首行的下一行在l/2-2*i和l/2+2*i处的图形

  a[-2*i+2*n+1][l/2-2*i]='$';

  a[-2*i+2*n+1][l/2+2*i]='$';

  a[l-(-2*i+2*n)-2][l/2-2*i]='$';

  a[l-(-2*i+2*n)-2][l/2+2*i]='$';

//打印每层图形首行的向下两行会有‘$$$.’的规律

    for(j=l/2-2*i-1;j<l/2-2*i+1;j++)

{

a[-2*i+2*n+2][j]='$';

a[-2*i+2*n+2][l-j-1]='$';

a[l-(-2*i+2*n)-3][j]='$';

a[l-(-2*i+2*n)-3][l-j-1]='$';

}

  }

  

for(i=0;i<l;i++)

{

for(j=0;j<l;j++)

{

printf("%c",a[i][j]);

}

printf("\n");

}

return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论