解题思路:通过二位数组解决问题
注意事项:观察图形规律
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复