一道蓝桥比赛的训练打印题【构造+不断的构造+构造规律】
历届试题 打印十字图
时间限制:1.0s 内存限制:256.0MB
题目地址:http://lx.lanqiao.org/problem.page?gpid=T25
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入
1
样例输出
样例输入
3
样例输出
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
代码:
#include <stdio.h> int main() { char s[150][150]; int i, j, k; int n; scanf("%d", &n); int center=(9+(n-1)*4+1)/2; s[center][center]='$'; for(j=center-2; j<=center+2; j++) s[center][j]='$'; for(i=center-2; i<=center+2; i++) s[i][center]='$'; //构造中心十字 int dd=4; int ff=5; for(i=1; i<=n; i++){ int up=center-dd; for(j=center-((ff-1)/2); j<=center+((ff-1)/2); j++) s[up][j]='$'; int down=center+dd; for(j=center-((ff-1)/2); j<=center+((ff-1)/2); j++) s[down][j]='$'; int left=center-dd;//列 for(k=center-((ff-1)/2); k<=center+((ff-1)/2); k++) s[k][left]='$'; int right=center+dd; for(k=center-((ff-1)/2); k<=center+((ff-1)/2); k++) s[k][right]='$'; dd+=2; ff+=4; } //打印四个边栏 for(i=1; i<=n; i++){ //构造1个点 int a, b; a=center-i*2; s[a][a]='$'; s[a-1][a]='$'; s[a][a-1]='$'; b=center+i*2; s[b][b]='$'; s[b][b+1]='$'; s[b+1][b]='$'; s[a][b]='$'; s[a-1][b]='$'; s[a][b+1]='$'; s[b][a]='$'; s[b][a-1]='$'; s[b+1][a]='$'; } for(i=1; i<=9+(n-1)*4; i++) { for(j=1; j<=9+(n-1)*4; j++) if(s[i][j]=='$') printf("$"); else printf("."); printf("\n"); } return 0; }