Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >蓝桥杯 历届试题 打印十字(图解)----------C语言—菜鸟级

蓝桥杯 历届试题 打印十字(图解)----------C语言—菜鸟级

作者头像
Fivecc
发布于 2022-11-21 06:40:20
发布于 2022-11-21 06:40:20
33300
代码可运行
举报
文章被收录于专栏:前端ACE前端ACE
运行总次数:0
代码可运行

[蓝桥杯][2013年第四届真题]打印十字图

时间限制: 1Sec 内存限制: 128MB 提交: 110 解决: 82

题目描述 历届试题 打印十字图 时间限制:1.0s 内存限制:256.0MB

问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

提示 请仔细观察样例,尤其要注意句点的数量和输出位置。

输入 一个正整数 n (n< 30) 表示要求打印图形的层数。 输出 对应包围层数的该标志。 样例输入 3 样例输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$.. 

思路:注意观察,然后通过 层次覆盖法;一层一层的叠加;从最外层(底层)开始;为达到十字效果,通过 两个行 列相反的矩阵覆盖叠加而成; 做完一个外十字 做下一个十字时 注意缩进 本题除 最外层不满足十字;其他各层’.‘与’$'区域均满足十字; 下面是图例

完成后大致是这个样子 蓝色部分代表 ‘ . ’ 红色部分 代表‘ $ ’

那么 我们是怎么得到的那 那么接下来 从最低层开始,最低层就是 一个矩阵,遍历一遍 就得到了 对吧。

接下来加上一层, 又是一个矩阵 只是不过左右两边各少了两个单位,对吧 在原数组上操作,红的代表 ‘$’ ,蓝的代表‘ . ’ 。没毛病吧

继续 再加一层,看到了吧,现在十字的最外边已经构造好了。

这里还有一个 小技巧 更正一下 这个十字矩阵实际是方阵,而图形关于对角线对称。见下图 那么假设 A的坐标 为(i,j), 那么 B 的坐标为(j,i)对不对 交换横纵坐标, 比如 A(1,4) 那么 B 就为(4,1)。 所以这两层可以一起操作。

继续 还没完。 如法炮制。红的代表 ‘$’ ,蓝的代表‘ . ’ 。然后就是重复叠上去就好了

AC 代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #include<stdio.h>
 void f(int n) {
 	int i,j,t,k;  t=n+1; n=n*4+5;//根据规律算出输出矩阵实际 行 列大小 
 	char a[130][130];
 	for(i=1;i<=n;i++)//最外层 
 	for(j=1;j<=n;j++)
 	   a[i][j]='.';
 	   for(k=1;k<=t;k++) {//十字层数 K代表那一层
	 	   	for(i=1+2*k;i<=n-2*k;i++)//'$'区域十字合成 
	 	   	 for(j=1+2*k-2;j<=n-(2*k-2);j++)//左右(上下)两边少两个单位
	 	   	      a[i][j]='$',a[j][i]='$';//对称性质 
	 	   	for(i=1+2*k+1;i<=n-(2*k+1);i++)//'.'区域十字合成 
	 	   	 for(j=1+2*k-1;j<=n-(2*k-1);j++) //只比上一层缩水一个单位(仔细观察) 
	 	   	     a[i][j]='.', a[j][i]='.'; //对称性质 
		}
 	   for(i=1;i<=n;i++) {//打印十字图像 
 	   	for(j=1;j<=n;j++)printf("%c",a[i][j]);
 	         printf("\n");
		}
 }
int main(){
    int n;
      scanf("%d",&n);
   f(n);
 return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验