题目链接:https://www.dotcpp.com/oj/problem1442.html
我把文字粘贴上来,那个符号的十字图空格不对齐,所以就没粘贴上来。
测试链接同题目链接。
思路:我刚开始写的时候也没有写出来,我看蓝桥杯网站上老师的讲解才会写的。
首先要计算n=1的时候长宽和n的关系。
在计算n=2的,n=3的,找到n与长宽关系。
之后先把n=1的逐行打印出来。
这个打印的时候,用二维数组进行处理。
然后就写出来一大串的循环关系。
之后,在n=1的时候打印的时候是在二维数组(0,0)的位置,如果把这个n=3 n=2 n=1变成动态的,就需要从相对位置开始打印。
打印图形的题,就是找数量关系,找到关系然后逐行打印。如果是多重的,那么就先写出来一种可能的n=1,然后再把这一种可能的,改活。一种可能的时候是从(0,0)开始打印,而多重就是从相对位置开始打印。
具体看代码,推推数学关系,慢慢就出来了,先写固定的,再写相对的。硬着头皮依据数学关系慢慢推。
过程:建立二维数组-->在相应的位置上把数组该位置的内容改为'$'-->输出二维数组非'$'的位置输出'.'-->结束。
#include <stdio.h> int N; char a[200][200]; void print() { int i,j; for(i=0;i<9+(N-1)*4;i++) { for(j=0;j<9+(N-1)*4;j++) { if(a[i][j]!='$') a[i][j]='.'; printf("%c",a[i][j]); } printf("\n"); } } void f(int n) { int i,l=(N-n)*2,r=9+(N-1)*4-1-l; //根据最大围数,和目前的围数,推算相对位置。看不懂以下代码就假设N n(N=4 n=4 N=4 n=3)的数带进去看看,把图片或者图形看成二维数组,这个数据是推导出来的。 //正数第一行与倒数第一行。 for(i=l+2;i<=r-2;i++) { a[l][i]='$'; a[r][i]='$'; } //正数第二行与倒数第二行。 a[l+1][l+2]='$'; a[l+1][r-2]='$'; a[r-1][l+2]='$'; a[r-1][r-2]='$'; //正数第三行与倒数第三行。 a[l+2][l+0]='$'; a[l+2][l+1]='$'; a[l+2][l+2]='$'; a[l+2][r-0]='$'; a[l+2][r-1]='$'; a[l+2][r-2]='$'; a[r-2][l+0]='$'; a[r-2][l+1]='$'; a[r-2][l+2]='$'; a[r-2][r-0]='$'; a[r-2][r-1]='$'; a[r-2][r-2]='$'; //左右两边的中间直线区域。 for(i=l+2;i<=r-2;i++) { a[i][r]='$'; a[i][l]='$'; } } int main() { int i; scanf("%d",&N); for(i=N;i>=1;i--) //打印第几圈。 { f(i); } for(i=2*N;i<=2*N+4;i++) //图形中间的十。 { a[2*N+2][i]='$'; a[i][2*N+2]='$'; } print(); //输出 return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复